Summary

  • Рабочий проект W3C от 15 декабря 2011 года описал Web Audio API как граф соединённых объектов AudioNode в AudioContext для обработки и синтеза звука.
  • Рекомендация от 17 июня 2021 года определила изменение параметров во времени, автономный рендеринг и собственные обработчики через AudioWorklet. Скрипт составляет схему, а аудиосистема браузера выполняет расчёт.

В репетиционной комнате стоит старый музыкальный автомат с большой красной кнопкой. Композитор просит звук, который начнётся тихо, пройдёт через фильтр, переместится влево и закончится в момент падения игрового персонажа. Автомат предлагает поставить ту же пластинку сначала. Он исправен. Просто заявку теперь прислали из другого отдела. Веб-страница уже умела проигрывать запись, но интерактивный мир хотел собирать звук по ходу действия.

Рабочий проект W3C от 15 декабря 2011 года описывал высокоуровневый интерфейс для обработки и синтеза аудио. Главная идея — граф маршрутизации: соединённые AudioNode определяют путь сигнала. Источник может передать звук фильтру, затем регулятору уровня, модулю пространственного размещения и конечному выходу. JavaScript соединяет части. Документ уточнял, что большая часть вычислений обычно происходит в оптимизированной внутренней реализации браузера, хотя обработка скриптом тоже допускалась. Композитор раскладывает кабели; аппаратная часть заставляет динамик двигаться.

Такое разделение отвечало реальной задаче. Элемент audio в HTML дал вебу простое воспроизведение. Проект 2011 года смотрел на игры и интерактивные приложения, которым нужны смешивание, фильтрация и генерация звука. Готовая запись может сопровождать сцену. Она сама не переедет влево вслед за персонажем и не превратит ноту в новый инструмент. Граф предложил небольшие общие детали, которые можно собрать в разные схемы.

Детали имели вполне земные обязанности. AudioContext был пространством графа. Источники поставляли материал; узел gain менял уровень; фильтр работал с частотами; delay добавлял задержку; анализатор давал данные для визуализации; узел назначения вёл к слышимому выходу. Проект описывал и разделение каналов с последующим объединением. Несколько звуков могли смешаться перед динамиком, а один — пройти через цепь эффектов. Итог определяла схема соединений, а не тайное мастерство красной кнопки.

Время тоже стало частью инструмента. Если удар в игре слышен заметно позже картинки, игрок обнаруживает неполадку раньше, чем прочитает объяснение. Ранний интерфейс описывал часы AudioContext и планирование звуковых событий относительно них. Приложение могло указать начало и конец звучания. Ему не нужно было будить JavaScript для каждого отдельного отсчёта сигнала и надеяться, что главный поток страницы в эту секунду ничем не занят.

Рабочий проект от 10 октября 2013 года сохранял граф как основу. Это был уже пятый публичный проект. Он говорил о сложном звуке игр, интерактивных программах, смешивании и фильтрации. Простая кнопка воспроизведения оставалась полезной для целой песни. Новый интерфейс был нужен там, где звук зависел от происходящего в странице.

К Рекомендации W3C от 17 июня 2021 года партитура стала подробнее. AudioParam позволял менять значения вроде усиления по звуковой временной шкале, а не серией торопливых вызовов в странице. OfflineAudioContext рассчитывал граф в буфер без немедленного воспроизведения через динамики. Приложение могло подготовить или изучить полученное аудио. Источники, обработка, часы и выход оставались основным устройством пульта.

Для собственных эффектов Рекомендация описала AudioWorklet. В графе находится AudioWorkletNode, а связанный AudioWorkletProcessor выполняет обработку в особой рабочей области. Программа может добавить свой звуковой модуль, не заставляя всю страницу лично переносить каждый отсчёт. Спецификация разделяла поток управления и поток рендеринга. Меню может подождать; звук, приуроченный к игровому действию, не должен стоять за ним в очереди.

История публикаций W3C идёт от проекта декабря 2011 года к Рекомендации июня 2021-го. Эти даты относятся к документам, а не к статистике использования или состязанию конкретных браузеров. Они показывают объём работы над общими правилами: соединения, каналы, часы, обработка, ресурсы и выход. Пульт с множеством ручек бесполезен, если никто не знает, как поведёт себя сигнал после поворота каждой.

Приложения получили свободу сочинять. Игра могла разместить взрыв в пространстве, музыкальный инструмент — связать осциллятор с фильтром, учебная страница — нарисовать звук с помощью анализатора. Браузер давал общую технику; программа решала, какую музыку делать. Вместо команды «проиграй файл» она могла описать путь, по которому должен родиться слышимый результат.

Музыкальный автомат не надо выносить на свалку. Для готовой песни его кнопка почти идеальна. Но оркестр, меняющий игру по движению человека, на одного сотрудника не рассчитаешь. Web Audio поставил пульт в браузере и дал приложению доступ к ручкам. Хорошую мелодию разработчикам всё равно пришлось писать самим.