Как я могу получить наиболее точную временную метку, когда действительно начинается аудиозапись при использовании MediaRecorder

Я делаю приложение для Android, которое записывает звук с наушника Bluetooth. Все работает нормально, и приложение может записывать звук через динамик.

Однако мне понадобится точная (или очень близкая к точной) миллисекунда, когда был записан первый аудиосигнал, если аудиозаписи будут мне полезны. Я попытался получить метку времени с помощью System.currentTimeMillis(); сразу после вызова .start() в MediaRecorder, как упоминалось в этом вопросе SO < /а>.

К сожалению, когда я использую этот метод для получения времени начала моей аудиозаписи, он часто сильно отличается (даже на 100 мс или более).

Получая время до вызова MediaRecorder.start() и после вызова, например:

audioStartTime1 = System.currentTimeMillis();
recorder.start();
audioStartTime2 = System.currentTimeMillis();

Я вижу, что между audioStartTime1 и audioStartTime2 проходит где-то от 50 до 150 мс. Кажется, запуск MediaRecorder занимает довольно много времени. Это не было бы проблемой, если бы запись началась сразу после возвращения recorder.start(), однако запись не начинается сразу после возвращения recorder.start(), но все же требуется некоторое время, пока наушник Bluetooth действительно не начнет запись. Эта задержка каждый раз разная и может составлять более 100 мс.

Есть ли способ получить более точную временную метку для первого аудиосэмпла?

Возможно, сохраните время, когда MediaRecorder получает первый пакет данных через Bluetooth. Как бы я это сделал?

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

Я действительно ценю некоторую помощь.

Спасибо.


person ChocolatNugget    schedule 15.05.2020    source источник
comment
Рассматривали ли вы возможность использования библиотеки постобработки для проверки фактического обнаружения звука в вашей записи? Если первые 100-150 мс файла молчат, а затем файл начинает включать какое-то ненулевое десятичное значение, теоретически вы можете обрезать заголовок каждого файла, чтобы удалить это молчание.   -  person tgmerritt    schedule 15.05.2020
comment
@tgmerritt У меня действительно есть тишина в начале всех моих аудиофайлов. Однако тишина всегда длится около 50 мс. Означает ли тишина, что MediaRecorder в конце концов начинает запись сразу после вызова .start(), но просто записывает тишину, пока ничего не поступает от наушника Bluetooth?   -  person ChocolatNugget    schedule 15.05.2020
comment
Я могу только догадываться об этом, но я думаю, что проблема, которую вы пытаетесь решить, вероятно, легче решить после того, как у вас есть записанный файл, чем пытаться засечь все в режиме реального времени. Постпродакшн творит чудеса, очищая как аудио, так и видео :)   -  person tgmerritt    schedule 16.05.2020