AudioProcessingEvent
Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры всё ещё могут её поддерживать, она может быть уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживаться только для совместимости. Избегайте её использования и обновите существующий код, если это возможно; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любой момент.
Интерфейс AudioProcessingEvent API Веб-аудио представляет события, возникающие при готовности буфера ввода ScriptProcessorNode для обработки.
Событие audioprocess с этим интерфейсом генерируется узлом ScriptProcessorNode при необходимости обработки звука. Во время обработки звука буфер ввода считывается и обрабатывается для создания выходных аудиоданных, которые затем записываются в буфер вывода.
Предупреждение: Эта функция устарела и должна быть заменена AudioWorklet.
Конструктор
-
AudioProcessingEvent()Устаревший -
Создаёт новый объект
AudioProcessingEvent.
Свойства экземпляра
Также реализует свойства, унаследованные от родительского класса, Event.
-
playbackTimeТолько для чтения Устаревший -
Число с плавающей запятой, представляющее время воспроизведения, как определено временем
AudioContext.currentTime. -
inputBufferТолько для чтения Устаревший -
Объект
AudioBuffer, который представляет буфер, содержащий входные аудиоданные, подлежащие обработке. Количество каналов определено как параметрnumberOfInputChannels, метода-фабрикиAudioContext.createScriptProcessor(). Обратите внимание, что возвращаемыйAudioBufferдействителен только в контексте обработчика событий. -
outputBufferТолько для чтения Устаревший -
Объект
AudioBuffer, который представляет буфер, в который должны быть записаны выходные аудиоданные. Количество каналов определено как параметрnumberOfOutputChannels, метода-фабрикиAudioContext.createScriptProcessor(). Обратите внимание, что возвращаемыйAudioBufferдействителен только в контексте обработчика событий.
Примеры
Добавление белого шума с помощью узла Script Processor
Следующий пример показывает, как использовать узел ScriptProcessorNode для обработки дорожки, загруженной с помощью AudioContext.decodeAudioData(), добавив немного белого шума к каждому аудиообразцу входной дорожки (буфера) и воспроизведя её через AudioDestinationNode. Функция scriptNode.onaudioprocess для каждого канала и каждого кадра образца принимает соответствующий audioProcessingEvent и использует его для перебора каждого канала входного буфера и каждого образца в каждом канале, добавляя небольшое количество белого шума, прежде чем установить этот результат в качестве выходного образца в каждом случае.
Примечание: Полный рабочий пример см. в нашем репозитории GitHub script-processor-node. (Вы также можете получить доступ к исходному коду.)
const myScript = document.querySelector("script");
const myPre = document.querySelector("pre");
const playButton = document.querySelector("button");
// Create AudioContext and buffer source
let audioCtx;
async function init() {
audioCtx = new AudioContext();
const source = audioCtx.createBufferSource();
// Create a ScriptProcessorNode with a bufferSize of 4096 and
// a single input and output channel
const scriptNode = audioCtx.createScriptProcessor(4096, 1, 1);
// Load in an audio track using fetch() and decodeAudioData()
try {
const response = await fetch("viper.ogg");
const arrayBuffer = await response.arrayBuffer();
source.buffer = await audioCtx.decodeAudioData(arrayBuffer);
} catch (err) {
console.error(
`Unable to fetch the audio file: ${name} Error: ${err.message}`,
);
}
// Give the node a function to process audio events
scriptNode.addEventListener("audioprocess", (audioProcessingEvent) => {
// The input buffer is the song we loaded earlier
let inputBuffer = audioProcessingEvent.inputBuffer;
// The output buffer contains the samples that will be modified
// and played
let outputBuffer = audioProcessingEvent.outputBuffer;
// Loop through the output channels (in this case there is only one)
for (let channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
let inputData = inputBuffer.getChannelData(channel);
let outputData = outputBuffer.getChannelData(channel);
// Loop through the 4096 samples
for (let sample = 0; sample < inputBuffer.length; sample++) {
// make output equal to the same as the input
outputData[sample] = inputData[sample];
// add noise to each output sample
outputData[sample] += (Math.random() * 2 - 1) * 0.1;
}
}
});
source.connect(scriptNode);
scriptNode.connect(audioCtx.destination);
source.start();
// When the buffer source stops playing, disconnect everything
source.addEventListener("ended", () => {
source.disconnect(scriptNode);
scriptNode.disconnect(audioCtx.destination);
});
}
// wire up play button
playButton.addEventListener("click", () => {
if (!audioCtx) {
init();
}
});
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
AudioProcessingEvent |
57 | 79 | Нет | 44 | 14.1 | 57 | Нет | 43 | 14.5 | 7.0 | 57 |
AudioProcessingEvent |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4 |
inputBuffer |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4 |
outputBuffer |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4 |
playbackTime |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | ≤37 |
См. также
© 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/AudioProcessingEvent