Аудиограф
Web Audio API обрабатывает звук как граф из узлов. Источник создаёт сигнал, узлы-эффекты его меняют, а последний узел отправляет звук на динамики.
AudioContext— контейнер и часы всей аудиоработы.ctx.currentTime— время в секундах.- Источники:
OscillatorNode(синтезированная волна) иAudioBufferSourceNode(сэмпл). - Эффекты:
GainNode(громкость),BiquadFilterNode(фильтр),StereoPannerNode(баланс). AnalyserNodeтолько измеряет сигнал;ctx.destination— выход.- Значения
AudioParam, напримерgain.gainиosc.frequency, можно менять по расписанию.
Узлы соединяют через connect(): он возвращает переданный узел, поэтому цепочки читаются слева направо.
AudioContext и политика autoplay
const ctx = new AudioContext();
startButton.addEventListener('click', async () => {
if (ctx.state === 'suspended') {
await ctx.resume();
}
beep();
});Браузеры блокируют звук, пока пользователь не взаимодействовал со страницей. Контекст, созданный раньше, стартует в состоянии suspended. Вызывайте ctx.resume() в обработчике клика, касания или клавиши и запускайте звук оттуда.
⚠️ Если вызвать
resume()вне действия пользователя, его promise может так и не завершиться. Вместо попытки играть при загрузке покажите кнопку «Старт».
Осциллятор, gain и огибающая
OscillatorNode генерирует волну: sine, square, sawtooth или triangle. Частота задаётся в герцах; 440 Гц — это нота ля.