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


91

Я хочу записати людський голос на свій телефон Android. Я помітив, що для цього у Android є два класи: AudioRecord та MediaRecorder . Хтось може сказати мені, в чому різниця між цими двома і які відповідні випадки використання для кожного?

Я хочу мати можливість аналізувати людську мову в режимі реального часу для вимірювання амплітуди тощо. Чи правильно я розумію, що AudioRecord більше підходить для цього завдання?

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

Відповіді:


82

Якщо ви хочете зробити свій аналіз у час запису все ще триває, вам потрібно використовувати AudioRecord, так як MediaRecorderавтоматично записує в файл. AudioRecordмає недолік, що після виклику startRecording()вам потрібно опитувати дані самостійно з AudioRecordекземпляра. Крім того, ви повинні читати та обробляти дані досить швидко, щоб внутрішній буфер не був переповнений (загляньте у вихідні дані logcat, AudioRecordповідомить, коли це станеться).


Чи є у вас зразок коду AudioRecord? Більшість з тих, кого я знайшов, це MediaRecorder ...
Роммель Парас,

@RommelParas шукає в цьому класі "телеграму" для android джерела. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
Давид

@David Чи знаєте ви простий зразок? Той, який працює самостійно?
розробник android

@androiddeveloper, на жаль, ні.
Девід

33

Як я розумію MediaRecorder, це чорний ящик, який дає на виході стиснутий аудіофайл і AudioRecorderдає вам лише необроблений звуковий потік, і ви повинні стискати його самостійно.

MediaRecorderдає вам максимальну амплітуду від останнього виклику getMaxAmplitude()методу, щоб ви могли застосувати звуковий візуалізатор, наприклад.

Тому в більшості випадків MediaRecorderце найкращий вибір, за винятком тих, у яких вам слід зробити дещо складну обробку звуку і вам потрібен доступ до необробленого аудіопотоку.


Дякуємо за згадку про метод getMaxAmplitude (). Це, швидше за все, все, що мені потрібно.
Dheeraj Bhaskar

Як я можу реалізувати візуалізатор за допомогою MediaRecorder?
OnePunchMan

Що саме тут допомагає getMaxAmplitude? Вам не потрібно кожного разу отримувати поточний для візуалізатора?
розробник Android

18

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.