AudioBufferSourceNode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Das AudioBufferSourceNode
-Interface ist ein AudioScheduledSourceNode
, das eine Audioquelle darstellt, die aus im Speicher gehaltenen Audiodaten besteht, die in einem AudioBuffer
gespeichert sind.
Dieses Interface ist besonders nützlich für die Wiedergabe von Audio, das besonders genaue Timing-Genauigkeiten erfordert, wie beispielsweise für Töne, die mit einem bestimmten Rhythmus übereinstimmen müssen und im Speicher gehalten werden können, anstatt von der Festplatte oder aus dem Netz gestreamt zu werden. Um Töne abzuspielen, die präzises Timing erfordern, aber aus dem Netz gestreamt oder von der Festplatte abgespielt werden müssen, verwenden Sie ein AudioWorkletNode
, um dessen Wiedergabe zu implementieren.
Ein AudioBufferSourceNode
hat keine Eingänge und genau einen Ausgang, der die gleiche Anzahl von Kanälen hat wie der AudioBuffer
, der durch seine buffer
-Eigenschaft angegeben wird. Wenn kein Puffer gesetzt ist – das heißt, wenn buffer
null
ist – enthält der Ausgang einen einzigen Kanal der Stille (jedes Sample ist 0).
Ein AudioBufferSourceNode
kann nur einmal abgespielt werden; nach jedem Aufruf von start()
müssen Sie einen neuen Knoten erstellen, wenn Sie denselben Ton erneut abspielen möchten. Glücklicherweise sind diese Knoten sehr kostengünstig zu erstellen, und die eigentlichen AudioBuffer
s können für mehrere Wiedergaben des Tons wiederverwendet werden. Tatsächlich können Sie diese Knoten auf eine "Fire-and-Forget"-Weise verwenden: Erstellen Sie den Knoten, rufen Sie start()
auf, um den Ton abzuspielen, und sich nicht einmal darum kümmern, eine Referenz darauf zu halten. Er wird automatisch zum geeigneten Zeitpunkt der Speicherbereinigung zugeführt, was erst einige Zeit nach dem Ende der Tonwiedergabe erfolgt.
Mehrfache Aufrufe von stop()
sind erlaubt. Der letzte Aufruf ersetzt den vorherigen, wenn der AudioBufferSourceNode
noch nicht das Ende des Puffers erreicht hat.
Anzahl der Eingänge | 0 |
---|---|
Anzahl der Ausgänge | 1 |
Kanalanzahl | definiert durch den zugehörigen [`AudioBuffer`](/de/docs/Web/API/AudioBuffer) |
Konstruktor
AudioBufferSourceNode()
-
Erstellt und gibt ein neues
AudioBufferSourceNode
-Objekt zurück. Alternativ können Sie dieBaseAudioContext.createBufferSource()
-Fabrikmethode verwenden; siehe Creating an AudioNode.
Instanz-Eigenschaften
Erbt Eigenschaften von seinem Elternteil, AudioScheduledSourceNode
.
AudioBufferSourceNode.buffer
-
Ein
AudioBuffer
, der die abzuspielende Audioaufnahme definiert, oder wenn auf den Wertnull
gesetzt, einen einzelnen Kanal der Stille definiert (bei dem jedes Sample 0,0 ist). AudioBufferSourceNode.detune
-
Ein k-rate
AudioParam
, das die Verstimmung der Wiedergabe in Cent darstellt. Dieser Wert wird mitplaybackRate
zusammengesetzt, um die Geschwindigkeit zu bestimmen, mit der der Ton abgespielt wird. Sein Standardwert ist0
(was keine Verstimmung bedeutet), und sein nomineller Bereich ist -∞ bis ∞. AudioBufferSourceNode.loop
-
Ein boolesches Attribut, das angibt, ob die Audioaufnahme erneut abgespielt werden muss, wenn das Ende des
AudioBuffer
erreicht ist. Sein Standardwert istfalse
. AudioBufferSourceNode.loopStart
Optional-
Ein Gleitkommawert, der die Zeit in Sekunden angibt, zu der die Wiedergabe des
AudioBuffer
beginnen muss, wennloop
true
ist. Sein Standardwert ist0
(was bedeutet, dass am Anfang jedes Loops die Wiedergabe am Beginn des Audiobuffers startet). AudioBufferSourceNode.loopEnd
Optional-
Eine Gleitkommazahl, die die Zeit in Sekunden angibt, zu der die Wiedergabe des
AudioBuffer
stoppt und zum durchloopStart
angegebenen Zeitpunkt zurückkehrt, wennloop
true
ist. Der Standardwert ist0
. AudioBufferSourceNode.playbackRate
-
Ein k-rate
AudioParam
, das den Geschwindigkeitsfaktor definiert, mit dem die Audioaufnahme abgespielt wird, wobei ein Wert von 1.0 der natürlichen Abtastrate des Tons entspricht. Da keine Tonhöhenkorrektur auf den Ausgang angewendet wird, kann dies verwendet werden, um die Tonhöhe der Aufnahme zu ändern. Dieser Wert wird mitdetune
zusammengesetzt, um die endgültige Wiedergabegeschwindigkeit zu bestimmen.
Instanz-Methoden
Erbt Methoden von seinem Elternteil, AudioScheduledSourceNode
, und überschreibt die folgende Methode:.
start()
-
Plant die Wiedergabe der im Puffer enthaltenen Audiodaten oder beginnt die Wiedergabe sofort. Außerdem können der Startversatz und die Spieldauer festgelegt werden.
Beispiele
In diesem Beispiel erstellen wir einen Zwei-Sekunden-Puffer, füllen ihn mit weißem Rauschen und spielen ihn dann mit einem AudioBufferSourceNode
ab. Die Kommentare sollten klar erklären, was vor sich geht.
Hinweis: Sie können den Code auch live ausführen, oder den Quellcode anzeigen.
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:
Für ein Beispiel zu decodeAudioData()
, siehe die Seite AudioContext.decodeAudioData()
.
Spezifikationen
Specification |
---|
Web Audio API # AudioBufferSourceNode |