Android AudioRecord против MediaRecorder для записи звука

Я хочу записать человеческий голос на моем телефоне Android. Я заметил, что Android имеет два класса для этого: осуществление аудиозаписи и MediaRecorder. Может ли кто-нибудь сказать мне, в чем разница между этими двумя и какие подходящие варианты использования для каждого?

Я хочу иметь возможность для анализа человеческой речи в режиме реального времени для измерения амплитуды и т. д. Правильно ли я понимаю, что AudioRecord лучше подходит для этой задачи?

Я заметил на официальный Android руководство веб-страницы для записи аудио, они используют MediaRecorder без упоминания AudioRecord.

3 ответов


если вы хотите выполнить анализ во время записи, вам нужно использовать AudioRecord, as MediaRecorder автоматически записывается в файл. AudioRecord имеет тот недостаток, что после вызова startRecording() вам нужно опросить данные самостоятельно из AudioRecord экземпляра. Кроме того, вы должны читать и обрабатывать данные достаточно быстро, чтобы внутренний буфер не был переполнен (посмотрите в выходе logcat,AudioRecord скажет вам, когда это произойдет).


как я понимаю MediaRecorder - черный ящик, который дает сжатый аудиофайл на выходе и AudioRecorder дает вам только сырой звуковой поток, и вы должны сжать его самостоятельно.

MediaRecorder дает вам максимальную мощность от последнего вызова getMaxAmplitude() метод, так что вы можете реализовать звуковой визуализатор, например.

так в большинстве случаев MediaRecorder является лучшим выбором, кроме тех, в которых вы должны сделать некоторые сложные обработки звука, и вам нужен доступ к raw аудио поток.


AudioRecorderer сначала сохраняет данные в minBuffer, затем копируется оттуда во временный буфер, в MediaRecorder копируется в файлы. В AudioRecorder нам нужен api setRecordPosition () для копирования сохраненных данных в требуемой позиции, тогда как в MediaRecorder указатель файла выполняет эту работу, чтобы установить положение маркера. AudioRecorder можно использовать для тех приложений, которые работают на эмуляторе это можно сделать, предоставляя низкую частоту дискретизации, такую как 8000, при использовании MediaRecorder звук нельзя записать с помощью эмулятора. В AudioRecord экран спит через некоторое время, в то время как в MediaRecorder экран не спит.