Webaudio: запись звука после громкой синхронизации звука

Я создаю веб-приложение, которое записывает звук с микрофона сразу после того, как он слышит громкий синхронизирующий шум (например, хлопок). Я ищу решение, которое будет работать для Chrome на ПК и Android.

Я пробовал следующие подходы

  1. используйте узел скриптпроцессора, который слушает микрофон, обнаруживает громкий узел и сразу после него сохраняет необработанные данные.

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

  1. Используйте audioWorklet, чтобы поместить обработку звука в другой поток и отправить записанные данные обратно в основной поток, используя порт.

Такой подход работает намного лучше. Он работает на рабочем столе Chrome. Но записанный звук на андроиде звучит чушь. Я поднял вопрос о Chrome, см. Билет здесь

Есть ли у кого-нибудь другие подходы, которые они могли бы предложить? Возможно, каким-то образом с помощью MediaRecorder? Однако при этом у нас нет доступа к необработанному звуку, поэтому мы не можем сказать, воспроизводился ли громкий звук синхронизации, если нет какого-либо умного способа.

Обратите внимание: меня не интересует подход, который синхронизирует постзапись.

Обновлять

Использование узла обработчика сценариев для прослушивания громкого хлопка и запуска MediaRecorder - отличное решение!

1 ответ

Предложение @AKX о том, чтобы scriptprocessnode прослушивал громкий звук, а затем запускал MediaRecorder, кажется лучшим на данный момент. Уловка состоит в том, чтобы установить как можно меньший размер буфера для узла процессора сценариев!

Другие вопросы по тегам