Какой коэффициент усиления необходим для медиа-рекордера Android, чтобы соответствовать выходу AVAudioRecorder iOS? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть кроссплатформенное приложение (iOS и Android), где я буду записывать аудиоклипы, а затем отправлять их на сервер для выполнения некоторых операций машинного обучения. В моем приложении для iOS я использую AVAudioRecorder для записи звука. В приложении для Android я использую MediaRecorder для записи звука. Изначально в мобильном я использую формат m4a из-за ограничений по размеру. После достижения сервера я преобразую его в формат wav, прежде чем использовать его в операциях ML.

Моя проблема в том, что в iOS AVAudioRecorder по умолчанию в ОС выполняет коэффициент усиления необработанных аудиоданных до того, как мы разработчик получим доступ к необработанным данным. Но в Android MediaRecorder не обеспечивает какого-либо усиления по умолчанию для необработанных данных. Другими словами, в iOS я никогда не получу необработанный аудиопоток с микрофона, тогда как в Android я всегда получу только необработанный аудиопоток с микрофона. Различие отчетливо видно, если вы можете записать один и тот же звук на телефонах iPhone и Android рядом с общим источником звука, а затем импортировать записанный звук в Audacity для визуального представления. Я приложил пример скриншота представления ниже.

enter image description here

На изображении первый трек - это запись Android, а второй - из записи iOS. Когда я слышу оба звука через наушники, я смутно различаю их, но когда я визуализирую точки данных, вы можете ясно увидеть разницу в изображении. Эти различия плохи для операций ML.

Очевидно, что в iPhone есть определенный коэффициент усиления, который я хотел бы также реализовать в Android.

Кто-нибудь знает о коэффициенте усиления? ИЛИ есть ли другие возможные альтернативы?

1 Ответ

1 голос
/ 11 октября 2019

Вполне возможно, что разница в том, что эффект автоматического управления усилением.

Вы можете отключить это в AVAudioSession вашего приложения, установив его режим на AVAudioSessionModeMeasurement, который вы делаете один раз в своем приложении -обычно при запуске. Это отключает большую обработку входного сигнала.

Читая описание вашей проблемы, вам лучше включить AGC на Android.

Если ни один из этих результатов не дает результата, вы можете увеличить масштаб обоих сигналов, чтобы они были чуть ниже отсечения.

let audioSession = AVAudioSession.sharedInstance()

audio.session.setMode(AVAudioSessionModeMeasurement)


...