Обработка звука сегодня довольно распространена в пространстве машинного обучения, в основном для моделей преобразования речи в текст или классификации жанров. Было бы неплохо иметь возможность быстро написать PoC в Интернете, демонстрирующий возможности ваших моделей? Ни слова больше, H2O Wave вступает в игру!

В этом сообщении в блоге показано, как получить доступ к микрофону пользователя, записать звук и загрузить его на сервер Wave для дальнейшей обработки. Он был протестирован на современных браузерах Chrome, Firefox и Safari.

Часть Python

Давайте сначала посмотрим на код нашего приложения Python. Самая первая задача — отрисовать одну кнопку и загрузить несколько полифиллов JS, чтобы наше приложение работало как в новых, так и в старых браузерах.

Как только мы закончим, следующим шагом будет регистрация обработчиков для запуска и остановки записи. Основная идея здесь состоит в том, чтобы вызвать нашу JS-функцию, которая позаботится о запросе разрешений микрофона и, в случае их предоставления, начнет запись. Кроме того, есть крохотная логика обновления метки кнопки с «Начать запись» на «Остановить запись» и наоборот.

Последняя часть Python посвящена получению самого аудиофайла через Wave Events. Когда мы получаем событие audio.captured, содержащее URL-адрес аудиофайла, мы загружаем его с сервера Wave, используя q.site.download. После этого аудиофайл готов к использованию вашими моделями машинного обучения. В демонстрационных целях в браузере отображается текст со ссылкой на запись.

Теперь наш app.py должен выглядеть так:

Javascript

Поскольку микрофон находится в браузере нашего пользователя, у нас нет другого выбора, кроме как использовать Javascript. Архитектура высокого уровня — это:

  1. Убедитесь, что браузер изначально поддерживает запись звука. Если нет, включите полифиллы в работу.
  2. Запросите разрешение на доступ к микрофону пользователя.
  3. Если разрешено, начните запись до остановки.
  4. После остановки преобразуйте собранный звук в формат wav (необходим для унификации, поскольку каждый браузер выводит звук в другом формате).
  5. Загрузите аудиоданные на сервер Wave.
  6. После загрузки создайте событие, содержащее URL-адрес загруженного аудиофайла.

Вы можете просто скопировать и вставить приведенный ниже код в файл с именем record.js, расположенный рядом с app.py (тот же уровень папки). Используемый код довольно сложен и определенно выходит за рамки этого сообщения в блоге или целевой аудитории H2O Wave.

Возможные улучшения

Текущая демонстрация отправляет весь аудиофайл после остановки записи. Однако во время записи можно также отправлять фрагменты аудио, фрагмент за фрагментом, что позволяет обрабатывать звук и отображать результаты в режиме реального времени. Все, что нужно изменить, это перенести логику с window.recorder.onstop на window.recorder.ondataavailable.

Полномасштабная демонстрация

Если вы хотите также увидеть, как подключить модель распознавания речи, подключенную к приложению, взгляните на Приложение для автоматического распознавания речи Рохана Рао в рамках его серии Waveton.

Заключение

С индивидуальной поддержкой Javascript в Wave действительно нет предела возможностям. Дайте мне знать, какие другие креативные способы использования JS вы нашли полезными в своих приложениях Wave!