BaseAudioContext: createScriptProcessor() Methode
Deprecated
Avoid using this feature in new projects. This feature may be a candidate for removal from web standards or browsers.>
Die createScriptProcessor()-Methode des BaseAudioContext-Interfaces erstellt einen ScriptProcessorNode, der für die direkte Audiobearbeitung verwendet wird.
Hinweis:
Diese Funktion wurde durch AudioWorklets und das AudioWorkletNode-Interface ersetzt.
Syntax
createScriptProcessor(bufferSize, numberOfInputChannels, numberOfOutputChannels)
Parameter
bufferSize-
Die Puffergröße in Einheiten von Abtastrahmen. Wenn angegeben, muss die
bufferSizeeinen der folgenden Werte haben: 256, 512, 1024, 2048, 4096, 8192, 16384. Wird sie nicht übergeben oder ist der Wert 0, wählt die Implementierung die beste Puffergröße für die gegebene Umgebung, die während der gesamten Lebensdauer des Knotens eine konstante Potenz von 2 sein wird.Dieser Wert steuert, wie häufig das
audioprocess-Event gesendet wird und wie viele Abtastrahmen bei jedem Aufruf verarbeitet werden müssen. Niedrigere Werte fürbufferSizeführen zu einer niedrigeren (besseren) Latenz. Höhere Werte sind notwendig, um Audio-Unterbrechungen und Störungen zu vermeiden. Es wird empfohlen, diese Puffergröße nicht festzulegen und der Implementierung zu erlauben, eine gute Puffergröße zu wählen, um ein Gleichgewicht zwischen Latenz und Audioqualität zu erreichen. numberOfInputChannels-
Ganzzahl, die die Anzahl der Kanäle für den Eingabeknoten angibt, standardmäßig 2. Werte bis zu 32 werden unterstützt.
numberOfOutputChannels-
Ganzzahl, die die Anzahl der Kanäle für den Ausgabeknoten angibt, standardmäßig 2. Werte bis zu 32 werden unterstützt.
Warnung:
WebKit erfordert derzeit (Version 31), dass beim Aufrufen dieser Methode eine gültige bufferSize übergeben wird.
Hinweis:
Es ist unzulässig, dass sowohl numberOfInputChannels als auch numberOfOutputChannels null sind.
Rückgabewert
Ein ScriptProcessorNode.
Beispiele
>Hinzufügen von weißem Rauschen mit einem Script-Processor
Das folgende Beispiel zeigt, wie Sie einen ScriptProcessorNode verwenden, um eine Spur, die über AudioContext.decodeAudioData() geladen wurde, zu verarbeiten, indem jedem Audiosample der Eingabespur ein wenig weißes Rauschen hinzugefügt wird und die Spur dann über den AudioDestinationNode abgespielt wird.
Für jeden Kanal und jeden Abtastrahmen verwendet der Ereignishandler des Script-Knotens für das audioprocess Ereignis das zugehörige audioProcessingEvent, um jeden Kanal des Eingabepuffers und jedes Sample in jedem Kanal zu durchlaufen und eine kleine Menge weißen Rauschens hinzuzufügen, bevor dieses Ergebnis als Ausgabe-Sample in jedem Fall festgelegt wird.
Hinweis: Sie können das vollständige Beispiel live ausführen oder sich den Quellcode ansehen.
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();
}
});
Spezifikationen
| Spezifikation |
|---|
| Web Audio API> # dom-baseaudiocontext-createscriptprocessor> |