AudioNode: метод connect()
Базовая Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Метод connect() интерфейса AudioNode позволяет соединить один из выходов узла с целевым объектом, который может быть другим AudioNode (тем самым направляя данные звука в указанный узел) или AudioParam, чтобы данные вывода узла автоматически использовались для изменения значения параметра со временем.
Синтаксис
connect(destination) connect(destination, outputIndex) connect(destination, outputIndex, inputIndex)
Параметры
destination-
AudioNodeилиAudioParam, к которому необходимо подключиться. outputIndexНеобязательно-
Индекс, указывающий, какой выходной канал текущего
AudioNodeподключить к назначению. Номера индексов определяются количеством выходных каналов (см. Аудиоканалы). Хотя вы можете подключить определенный выход только к одному входу (повторные попытки игнорируются), вы можете подключить выход к нескольким входам, вызвавconnect()повторно. Это позволяет реализовать распределение выходов. Значение по умолчанию — 0. inputIndexНеобязательно-
Индекс, описывающий, какой вход назначения вы хотите подключить к текущему
AudioNode; значение по умолчанию — 0. Номера индексов определяются количеством входных каналов (см. Аудиоканалы). Можно подключитьAudioNodeк другомуAudioNode, который, в свою очередь, подключается обратно к первомуAudioNode, создавая цикл.
Возвращаемое значение
Если назначение — узел, connect() возвращает ссылку на объект назначения AudioNode, что позволяет вам объединить несколько вызовов connect(). В некоторых браузерах более старые реализации этого интерфейса возвращают undefined.
Если назначение — AudioParam, connect() возвращает undefined.
Исключения
-
IndexSizeErrorDOMException -
Выбрасывается, если значение, указанное как
outputIndexилиinputIndex, не соответствует существующему входу или выходу. -
InvalidAccessErrorDOMException -
Выбрасывается, если целевой узел не входит в тот же аудиоконтекст, что и исходный узел.
-
NotSupportedErrorDOMException -
Выбрасывается, если указанное подключение создаст цикл (в котором звук возвращается по тем же узлам), и в цикле нет объектов
DelayNode, чтобы предотвратить застревание результата построения одного и того же кадра звука бесконечно. Также выбрасывается, если параметрinputIndexиспользуется, когда назначение —AudioParam.
Примеры
Подключение к аудиовходу
Наиболее очевидное использование метода connect() — направить аудиовыход одного узла на аудиовход другого узла для дальнейшей обработки. Например, вы можете направить аудио с MediaElementAudioSourceNode — то есть аудио с элемента HTML-медиа, такого как <audio> — через полосовой фильтр, реализованный с помощью BiquadFilterNode, чтобы уменьшить шум, прежде чем направить аудио к динамикам.
В этом примере создаётся генератор, а затем он связывается с узлом усиления, таким образом, чтобы узел усиления контролировал громкость узла генератора.
const audioCtx = new AudioContext(); const oscillator = audioCtx.createOscillator(); const gainNode = audioCtx.createGain(); oscillator.connect(gainNode); gainNode.connect(audioCtx.destination);
Пример AudioParam
В этом примере мы будем изменять значение усиления GainNode с помощью OscillatorNode со значением частоты с замедленной скоростью. Этот метод известен как LFO-контролируемый параметр.
const audioCtx = new AudioContext(); // create an normal oscillator to make sound const oscillator = audioCtx.createOscillator(); // create a second oscillator that will be used as an LFO (Low-frequency // oscillator), and will control a parameter const lfo = audioCtx.createOscillator(); // set the frequency of the second oscillator to a low number lfo.frequency.value = 2.0; // 2Hz: two oscillations per second // create a gain whose gain AudioParam will be controlled by the LFO const gain = audioCtx.createGain(); // connect the LFO to the gain AudioParam. This means the value of the LFO // will not produce any audio, but will change the value of the gain instead lfo.connect(gain.gain); // connect the oscillator that will produce audio to the gain oscillator.connect(gain); // connect the gain to the destination so we hear sound gain.connect(audioCtx.destination); // start the oscillator that will produce audio oscillator.start(); // start the oscillator that will modify the gain value lfo.start();
Примечания к AudioParam
Можно подключить выход AudioNode к нескольким AudioParam, и несколько выходов AudioNode к одному AudioParam с помощью нескольких вызовов connect(). Распределение выходов поэтому поддерживается.
AudioParam примет данные аудио, полученные с любого выхода AudioNode подключённого к нему, и переведёт его в моно, выполнив приведение (если это не уже моно). Затем он объединит его с любыми другими такими выходами, а также со значением внутреннего параметра (значением, которое AudioParam обычно имел бы без каких-либо подключённых аудиовыходов), включая любые запланированные изменения в графике для параметра.
Следовательно, можно выбрать диапазон, в котором будет изменяться AudioParam, задав значение AudioParam в центральную частоту, и использовать GainNode между источником аудио и AudioParam, чтобы отрегулировать диапазон изменений AudioParam.
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-audionode-connect |
| Web Audio API # dom-audionode-connect-destinationparam-output |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
connect |
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/connect