Я использую AudioRecord.read для записи данных PCM в байты. Однако я обнаружил, что он ограничил инициализацию объекта AudioRecord не менее 3904 буферов. Если частота дискретизации равна 44100. Поскольку мне нужно выполнить БПФ данных, поэтому я увеличил выборки до 4096. В результате обратный вызов выполняется каждые 40-60 мс с помощью setPositionNotificationPeriod до 500. Поскольку дальнейшее уменьшение длительности не делает, t внести изменения. Я обожаю, если это самое быстрое время обратного вызова с настройкой ниже?Обработка звука в реальном времени в Android
Частота дискретизации: 44100
Канал: Mono
Кодирование: PCM 16 BIT
BufferSize: 4096
(я не уверен, если это 4096 или 2048, так как я прочитал 4096 байт каждый раз, и он может заполнять только 2048 буфера на 2 байта)
допустимо даже 40-60 мс, затем я выполняю БПФ, который в конечном итоге блокирует каждый обратный вызов около 200-300 мс. И есть еще много шума, влияющих на точность. Я использую этот исходный код: FFT in Java и Complex class
Есть ли другой выбор, который обеспечивает быструю, надежную и потребляет меньше памяти для обработки БПФ? Я обнаружил, что вышеперечисленным классам слишком много объектов и появляется множество сообщений коллекции gragarbage.
В заключение, у меня есть 3 вопроса:
- Является ли начальное BufferSize равно буферов, которые я могу читать из .read метода?
- Есть ли ограничение на 40-60 мс для сбора аудиоданных с частотой дискретизации 44100?
- Не могли бы вы предложить некоторую библиотеку FFT, чтобы я мог улучшить производительность при обработке БПФ? (Я думаю, если лучше использовать C-библиотеку?)
Извините за мой плохой английский, также спасибо, что потратили свое время на мой вопрос.
P.S Я попробовал его на iOS, и он может просто взять 512 образцов с частотой дискретизации 44100. Поэтому каждый обратный вызов занимает около 10 мс.
Вблизи моего вопроса: http://stackoverflow.com/questions/3069617/android-signal-analysis-some-filters –
@ Dan, Хороший вопрос. Я также пытаюсь обработать сигнал в режиме реального времени. Частота выборки и другие входные конфигурации одинаковы. Моя проблема в том, что я слишком долго занимаюсь обработкой входящих образцов, а время между двумя последующими чтениями очень мало. Мне было интересно, есть ли у вас похожие проблемы и как вы решаете это. TIA –
Вы имеете в виду, что ваш расчет занимает слишком много времени, в результате вы не можете завершить процесс в течение двух обратных вызовов? Я считаю, что метод обработки звука не должен занимать слишком много времени, иначе вы не сможете обработать каждый буфер в каждом обратном вызове. Кроме того, NEW так же, как объект, который вы можете. Таким образом, вы можете исключить, что процессор продолжает обрабатывать процессы управления памятью. – Dan