AudioBufferSourceNode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die AudioBufferSourceNode-Schnittstelle ist ein AudioScheduledSourceNode, der eine Audioquelle aus im Arbeitsspeicher vorliegenden Audiodaten repräsentiert. Diese Daten sind in einem AudioBuffer gespeichert.
Diese Schnittstelle eignet sich besonders für die Wiedergabe von Audio mit hohen Anforderungen an die zeitliche Genauigkeit, etwa für Klänge, die einem bestimmten Rhythmus folgen müssen und im Arbeitsspeicher gehalten werden können, statt von einem Datenträger oder aus dem Netzwerk abgespielt zu werden. Wenn Klänge eine genaue zeitliche Steuerung erfordern, aber aus dem Netzwerk gestreamt oder von einem Datenträger abgespielt werden müssen, verwenden Sie einen AudioWorkletNode, um die Wiedergabe zu implementieren.
Ein AudioBufferSourceNode hat keine Eingänge und genau einen Ausgang. Dieser hat dieselbe Anzahl an Kanälen wie der AudioBuffer, der durch die Eigenschaft buffer angegeben wird. Ist kein Buffer festgelegt – das heißt, buffer ist null –, enthält der Ausgang einen einzelnen Kanal mit Stille (jeder Sample-Wert ist 0).
Ein AudioBufferSourceNode kann nur einmal abgespielt werden. Nach jedem Aufruf von start() müssen Sie einen neuen Node erstellen, wenn Sie denselben Klang erneut abspielen möchten. Diese Nodes lassen sich jedoch mit sehr geringem Aufwand erstellen, und die eigentlichen AudioBuffers können für die mehrmalige Wiedergabe eines Klangs wiederverwendet werden. Sie können diese Nodes nach dem Prinzip „Starten und vergessen“ verwenden: Erstellen Sie den Node, rufen Sie start() auf, um die Wiedergabe zu beginnen, und verzichten Sie sogar darauf, eine Referenz darauf zu behalten. Er wird zu einem geeigneten Zeitpunkt automatisch von der Garbage Collection erfasst, frühestens einige Zeit nachdem die Wiedergabe beendet ist.
Mehrere Aufrufe von stop() sind zulässig. Der jeweils letzte Aufruf ersetzt den vorherigen, sofern der AudioBufferSourceNode das Ende des Buffers noch nicht erreicht hat.

| Anzahl der Eingänge | 0 |
|---|---|
| Anzahl der Ausgänge | 1 |
| Kanalanzahl | durch den zugehörigen [`AudioBuffer`](/de/docs/Web/API/AudioBuffer) festgelegt |
Konstruktor
AudioBufferSourceNode()-
Erstellt ein neues
AudioBufferSourceNode-Objekt und gibt es zurück. Alternativ können Sie die Factory-MethodeBaseAudioContext.createBufferSource()verwenden. Siehe Erstellen eines AudioNode.
Instanzeigenschaften
Erbt Eigenschaften von der übergeordneten Schnittstelle AudioScheduledSourceNode.
AudioBufferSourceNode.buffer-
Ein
AudioBuffer, der die abzuspielenden Audiodaten festlegt. Ist der Wert aufnullgesetzt, wird ein einzelner Kanal mit Stille festgelegt (in dem jeder Sample-Wert 0,0 ist). AudioBufferSourceNode.detuneSchreibgeschützt-
Ein k-rate-
AudioParam, der die Verstimmung der Wiedergabe in Cent angibt. Dieser Wert wird mitplaybackRatekombiniert, um die Wiedergabegeschwindigkeit zu bestimmen. Der Standardwert ist0(keine Verstimmung); der nominelle Wertebereich reicht von −∞ bis ∞. AudioBufferSourceNode.loop-
Ein boolesches Attribut, das angibt, ob die Audiodaten nach Erreichen des Endes des
AudioBuffererneut abgespielt werden sollen. Der Standardwert istfalse. AudioBufferSourceNode.loopStartOptional-
Ein Gleitkommawert, der den Zeitpunkt in Sekunden angibt, an dem die Wiedergabe des
AudioBufferbeginnen soll, wennloopden Werttruehat. Der Standardwert ist0(die Wiedergabe beginnt bei jeder Wiederholung am Anfang des Audio-Buffers). AudioBufferSourceNode.loopEndOptional-
Ein Gleitkommawert, der den Zeitpunkt in Sekunden angibt, an dem die Wiedergabe des
AudioBufferendet und zu dem durchloopStartangegebenen Zeitpunkt zurückspringt, wennloopden Werttruehat. Der Standardwert ist0. AudioBufferSourceNode.playbackRateSchreibgeschützt-
Ein k-rate-
AudioParam, der den Geschwindigkeitsfaktor für die Wiedergabe der Audiodaten festlegt. Ein Wert von 1,0 entspricht der ursprünglichen Abtastrate des Klangs. Da am Ausgang keine Tonhöhenkorrektur vorgenommen wird, lässt sich damit die Tonhöhe des Samples ändern. Dieser Wert wird mitdetunekombiniert, um die endgültige Wiedergabegeschwindigkeit zu bestimmen.
Instanzmethoden
Erbt Methoden von der übergeordneten Schnittstelle AudioScheduledSourceNode und überschreibt die folgende Methode:
start()-
Plant die Wiedergabe der im Buffer enthaltenen Audiodaten oder beginnt sofort mit der Wiedergabe. Ermöglicht außerdem, den Startversatz und die Wiedergabedauer festzulegen.
Beispiele
In diesem Beispiel erstellen wir einen zwei Sekunden langen Buffer, füllen ihn mit weißem Rauschen und spielen ihn anschließend mit einem AudioBufferSourceNode ab. Die Kommentare sollten deutlich erklären, was dabei geschieht.
Hinweis: Sie können den Code auch direkt ausführen oder sich den Quellcode ansehen.
const audioCtx = new AudioContext();
// Create an empty three-second stereo buffer at the sample rate of the AudioContext
const myArrayBuffer = audioCtx.createBuffer(
2,
audioCtx.sampleRate * 3,
audioCtx.sampleRate,
);
// Fill the buffer with white noise;
// just random values between -1.0 and 1.0
for (let channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
// This gives us the actual ArrayBuffer that contains the data
const nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < myArrayBuffer.length; i++) {
// Math.random() is in [0; 1.0]
// audio needs to be in [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
const source = audioCtx.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = myArrayBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);
// start the source playing
source.start();
Hinweis:
Ein Beispiel für decodeAudioData() finden Sie auf der Seite zu AudioContext.decodeAudioData().
Spezifikationen
| Spezifikation |
|---|
| Web Audio API> # AudioBufferSourceNode> |