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

93

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

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

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

stackoverflowuser2010
источник

Ответы:

84

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

Стефан
источник
У вас есть образец кода AudioRecord? Большинство из тех, что я нашел, это MediaRecorder ...
Rommel Paras
@RommelParas поищите в этом классе "телеграмму" источник android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
Дэвид,
@ Дэвид Знаете ли вы более простой образец? Тот, который работает сам по себе?
разработчик Android
@androiddeveloper, к сожалению, нет.
David
34

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

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

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

Лампапос
источник
1
Спасибо за упоминание метода getMaxAmplitude (). Скорее всего, это все, что мне нужно.
Дирадж Бхаскар
Как я могу реализовать визуализатор с помощью MediaRecorder?
OnePunchMan
1
Что именно здесь помогает getMaxAmplitude? Разве вам не нужно получать текущее значение в каждый момент для визуализатора?
разработчик Android
18

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

Sanjeev51
источник