AudioNode
Базовая реализация Широко доступна *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс AudioNode является общим интерфейсом для представления модуля обработки звука.
Примеры включают:
- источник звука (например, элемент HTML
<audio>или<video>, узелOscillatorNodeи т. д.), - назначение звука,
- промежуточный модуль обработки (например, фильтр, такой как
BiquadFilterNodeилиConvolverNode), или - управление громкостью (например,
GainNode)
Примечание: Узел AudioNode может быть объектом обработки событий, поэтому он реализует интерфейс EventTarget.
Свойства экземпляра
-
AudioNode.contextТолько чтение -
Возвращает связанный
BaseAudioContext, то есть объект, представляющий граф обработки, в котором участвует узел. -
AudioNode.numberOfInputsТолько чтение -
Возвращает количество входов, подаваемых на узел. Источниковые узлы определяются как узлы, имеющие свойство
numberOfInputsсо значением0. -
AudioNode.numberOfOutputsТолько чтение -
Возвращает количество выходов, выходящих из узла. Узлы назначения — такие как
AudioDestinationNode— имеют значение0для этого атрибута. AudioNode.channelCount-
Представляет целое число, используемое для определения количества каналов, используемых при смешивании и разделении каналов подключений к любым входам узла. Его использование и точное определение зависят от значения
AudioNode.channelCountMode. AudioNode.channelCountMode-
Представляет перечисление, описывающее способ сопоставления каналов между входами и выходами узла.
AudioNode.channelInterpretation-
Представляет перечисление, описывающее значение каналов. Это толкование определит, как произойдёт смешивание и разделение каналов звука. Возможные значения —
"speakers"или"discrete".
Методы экземпляра
Также реализует методы из интерфейса EventTarget.
AudioNode.connect()-
Позволяет подключить выход этого узла в качестве входа к другому узлу, либо в виде данных аудио, либо в виде значения
AudioParam. AudioNode.disconnect()-
Позволяет отключить текущий узел от другого узла, к которому он уже подключён.
Описание
Граф маршрутизации звука
Каждый AudioNode имеет входы и выходы, и несколько узлов звука соединяются, чтобы создать график обработки. Этот граф содержится в AudioContext, и каждый узел звука может принадлежать только одному контексту звука.
Источник звука имеет ноль входов, но один или несколько выходов и может использоваться для генерации звука. С другой стороны, узел назначения не имеет выходов; вместо этого все его входы воспроизводятся непосредственно через динамики (или любое другое устройство вывода звука, используемое контекстом звука). Кроме того, существуют узлы обработки, имеющие входы и выходы. Точная обработка отличается в зависимости от AudioNode , но, как правило, узел считывает свои входы, выполняет некоторую обработку звука и генерирует новые значения для своих выходов или пропускает звук (например, в AnalyserNode, где результат обработки доступен отдельно).
Чем больше узлов в графе, тем выше задержка будет. Например, если у вашего графа задержка 500 мс, когда источник звука воспроизводит звук, потребуется полсекунды, прежде чем этот звук будет услышан через динамики (или даже дольше из-за задержки в базовом устройстве аудио). Поэтому, если вам нужна интерактивность аудио, поддерживайте граф как можно меньше и размещайте управляемые пользователем узлы звука в конце графа. Например, управление громкостью (GainNode) должно быть последним узлом, чтобы изменения громкости имели мгновенный эффект.
Каждый вход и выход имеет определённое количество каналов. Например, моноаудио имеет один канал, а стереоаудио — два канала. API Web Audio будет смешивать или разделять каналы по мере необходимости; см. спецификацию Web Audio для получения подробностей.
Список всех узлов звука см. на главной странице Web Audio API.
Создание узла AudioNode
Существует два способа создания узла AudioNode: через конструктор и через метод фабрики.
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
fftSize: 2048,
maxDecibels: -25,
minDecibels: -60,
smoothingTimeConstant: 0.5,
});
// factory method const analyserNode = audioCtx.createAnalyser(); analyserNode.fftSize = 2048; analyserNode.maxDecibels = -25; analyserNode.minDecibels = -60; analyserNode.smoothingTimeConstant = 0.5;
Вы можете использовать конструкторы или методы фабрики, или сочетать их, однако существуют преимущества использования конструкторов:
- Все параметры можно установить во время создания и не нужно устанавливать их по отдельности.
- Вы можете наследовать узел аудио. Хотя фактическая обработка выполняется внутри браузером и не может быть изменена, вы можете написать оболочку вокруг узла аудио, чтобы обеспечить пользовательские свойства и методы.
- Несколько лучшая производительность: и в Chrome, и в Firefox методы фабрики вызывают конструкторы внутри.
Краткая история: Первая версия спецификации Web Audio определяла только методы фабрики. После обзора дизайна в октябре 2013 года было решено добавить конструкторы, потому что у них есть многочисленные преимущества перед методами фабрики. Конструкторы были добавлены в спецификацию с августа по октябрь 2016 года. Методы фабрики продолжают включаться в спецификацию и не устарели.
Пример
Этот простой фрагмент кода демонстрирует создание некоторых узлов аудио и то, как можно использовать свойства и методы узла AudioNode. Примеры такого использования можно найти в любых примерах, связанных на странице Web Audio API (например, Violent Theremin).
const audioCtx = new AudioContext(); const oscillator = new OscillatorNode(audioCtx); const gainNode = new GainNode(audioCtx); oscillator.connect(gainNode).connect(audioCtx.destination); oscillator.context; oscillator.numberOfInputs; oscillator.numberOfOutputs; oscillator.channelCount;
Спецификации
| Спецификация |
|---|
| Web Audio API # AudioNode |
Совместимость с браузерами
| Настольный компьютер | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
AudioNode |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
channelCount |
27 | 12 | 25 | 15 | 7 | 27 | 25 | 15 | 7 | 1.5 | ≤37 |
channelCountMode |
27 | 12 | 25 | 15 | 7 | 27 | 25 | 15 | 7 | 1.5 | ≤37 |
channelInterpretation |
27 | 12 | 25 | 15 | 7 | 27 | 25 | 15 | 7 | 1.5 | ≤37 |
connect |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
context |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
disconnect |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
numberOfInputs |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
numberOfOutputs |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioNode