BaseAudioContext: метод createScriptProcessor()
Устаревшее: Эта функция больше не рекомендуется. Несмотря на то, что некоторые браузеры могут её поддерживать, она может быть удалена из соответствующих веб-стандартов, находится в процессе удаления или поддерживается только для совместимости. Избегайте её использования и, если возможно, обновите существующий код; см. таблицу совместимости в конце этой страницы, чтобы принять решение. Помните, что эта функция может перестать работать в любой момент.
Метод createScriptProcessor() интерфейса BaseAudioContext создаёт узел ScriptProcessorNode, используемый для прямой обработки звука.
Примечание: Эта функция была заменена на AudioWorklets и интерфейс AudioWorkletNode.
Синтаксис
createScriptProcessor(bufferSize, numberOfInputChannels, numberOfOutputChannels)
Параметры
bufferSize-
Размер буфера в единицах образцов-кадров. Если указан, bufferSize должен быть одним из следующих значений: 256, 512, 1024, 2048, 4096, 8192, 16384. Если он не передан или если значение равно 0, реализация выберет наилучший размер буфера для данной среды, который будет постоянной степенью двойки на протяжении всего жизненного цикла узла.
Это значение управляет частотой отправки события
audioprocessи количеством образцов-кадров, которые необходимо обработать при каждом вызове. Более низкие значения дляbufferSizeприведут к более низкой (лучшей) задержке. Более высокие значения потребуются для предотвращения разрыва и сбоев звука. Рекомендуется авторам не указывать этот размер буфера и позволить реализации выбрать оптимальный размер буфера, чтобы сбалансировать задержку и качество звука. numberOfInputChannels-
Целое число, определяющее количество каналов для входного сигнала этого узла, по умолчанию равно 2. Поддерживаются значения до 32.
numberOfOutputChannels-
Целое число, определяющее количество каналов для выходного сигнала этого узла, по умолчанию равно 2. Поддерживаются значения до 32.
Предупреждение: В настоящее время (версия 31) WebKit требует передачи допустимого bufferSize при вызове этого метода.
Примечание: Недопустимо, чтобы как numberOfInputChannels , так и numberOfOutputChannels были равны нулю.
Возвращаемое значение
Узел ScriptProcessorNode.
Примеры
Добавление белого шума с помощью узла обработки скриптов
Следующий пример демонстрирует, как использовать узел ScriptProcessorNode для обработки трека, загруженного с помощью AudioContext.decodeAudioData(), добавления небольшого белого шума к каждому образцу аудио входного трека и воспроизведения его через AudioDestinationNode.
Для каждого канала и каждого образца кадра обработчик событий audioprocess узла скрипта использует соответствующий audioProcessingEvent для перебора каждого канала входного буфера и каждого образца в каждом канале и добавляет небольшое количество белого шума, прежде чем установить полученное значение в качестве выходного образца в каждом случае.
Примечание: Вы можете запустить полный пример в реальном времени или просмотреть исходный код.
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 | |
createScriptProcessor |
24 | 12 | 25 | 15 | 7 | 25 | 25 | 14 | 7 | 1.5 | ≤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/BaseAudioContext/createScriptProcessor