Анализ AudioTrack на Android (альтернативы визуализатору)

Я хочу проанализировать записанный звук микрофона моего приложения для Android.

К сожалению, Visualizer может работать только на AudioTrack, который воспроизводится в данный момент. В настоящее время я записываю с помощью AudioRecord и копирую данные в AudioTrack. где визуализатор слушает. Но эта архитектура вызывает ужасную петлю воспроизведения-записи.

Одним из обходных путей было уменьшение громкости AudioTrack до минимально возможного уровня во время записи, но это совсем не похоже на хорошее решение.

Есть ли альтернатива классу Visualizer, который предоставляет средства для захватить FFT-данные с записанной дорожки?


person Alexander Pacha    schedule 09.04.2013    source источник
comment
Из любопытства, что произойдет, если вы передадите идентификатор аудиосессии объекта AudioRecord объекту Visualizer? Visualiser mVisualizer = new Visualizer(mAudioRecord.getAudioSessionId());   -  person Brett Duncavage    schedule 10.04.2013
comment
AudioRecord, к сожалению, не предоставляет такой метод, как getAudioSessionId(). Другая проблема с моим временным обходным решением заключается в том, что уменьшение громкости устройства также отключит звук audioTrack, что означает, что анализ больше не выполняется.   -  person Alexander Pacha    schedule 12.04.2013
comment
Согласно документации (developer.android.com/reference/android /media/), ему getAudioSessionId() предоставлено, что он доступен только на уровне API 16 и выше.   -  person Brett Duncavage    schedule 12.04.2013
comment
RuntimeException: Не удается инициализировать модуль визуализатора, ошибка -4   -  person Alexander Pacha    schedule 12.04.2013
comment
Хех, хорошо. Ну, по крайней мере, мы знаем, что это не работает.   -  person Brett Duncavage    schedule 12.04.2013
comment
Привет @Alexander, не могли бы вы опубликовать где-нибудь полный рабочий пример, пожалуйста?   -  person Rocel    schedule 24.06.2014


Ответы (2)


дополнительный. это говорит

Визуализатор эффекта AudioFlinger createEffect_l() (флаги 00000008) создан в потоке неправильного типа 3. AudioEffect set(): AudioFlinger не смог создать эффект, статус: -22

после поиска «создано для неправильного типа потока» было обнаружено, что что-то не так с визуализацией входного сигнала. Я боролся до сих пор, но безрезультатно.

person minimanimo    schedule 04.04.2014

Я решил это сейчас, проанализировав данные непосредственно из AudioRecord, как описано в Android audio FFT для извлечения определенной амплитуды частоты с помощью audiorecord.

person Alexander Pacha    schedule 31.05.2017