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

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

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

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


person stackoverflowuser2010    schedule 04.05.2011    source источник


Ответы (3)


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

person Stephan    schedule 04.05.2011
comment
У вас есть образец кода AudioRecord? Большинство из тех, что я нашел, - это MediaRecorder ... - person Rommel Paras; 12.09.2014
comment
@RommelParas посмотрите этот класс в телеграмме для источника Android. github.com/ DrKLO / Telegram / blob / master / TMessagesProj / src / main / - person David; 14.11.2016
comment
@ Дэвид Знаете ли вы более простой образец? Тот, который работает сам по себе? - person android developer; 24.06.2018
comment
@androiddeveloper, к сожалению, нет. - person David; 25.06.2018

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

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

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

person Lampapos    schedule 07.10.2013
comment
Спасибо за упоминание метода getMaxAmplitude (). Скорее всего, это все, что мне нужно. - person Dheeraj Bhaskar; 21.03.2014
comment
Как я могу реализовать визуализатор с помощью MediaRecorder? - person OnePunchMan; 30.03.2015
comment
Что именно здесь помогает getMaxAmplitude? Разве вам не нужно получать текущую информацию для визуализатора в каждый момент времени? - person android developer; 24.06.2018

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

person sanjeev51    schedule 15.04.2013