AudioBufferSourceNode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Die AudioBufferSourceNode
-Schnittstelle ist ein AudioScheduledSourceNode
, das eine Audioquelle darstellt, die aus Audiodaten im Speicher besteht, welche in einem AudioBuffer
gespeichert sind.
Diese Schnittstelle ist besonders nützlich für die Wiedergabe von Audio, das besonders strenge Timing-Genauigkeiten erfordert, wie zum Beispiel bei Tönen, die einem bestimmten Rhythmus folgen müssen und im Speicher gehalten werden können, anstatt von der Festplatte oder dem Netzwerk abgespielt zu werden. Für die Wiedergabe von Sounds, die eine genaue Timing-Steuerung erfordern, aber aus dem Netzwerk gestreamt oder von der Festplatte abgespielt werden müssen, verwenden Sie einen AudioWorkletNode
, um seine Wiedergabe zu implementieren.
Ein AudioBufferSourceNode
hat keine Eingänge und genau einen Ausgang, der die gleiche Anzahl an Kanälen wie der AudioBuffer
hat, der durch seine buffer
-Eigenschaft angegeben ist. Wenn kein Buffer 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 Sound erneut abspielen möchten. Glücklicherweise sind diese Knoten sehr kostengünstig in der Erstellung, und die eigentlichen AudioBuffer
können für mehrere Wiedergaben des Sounds wiederverwendet werden. Tatsächlich können Sie diese Knoten in einer "Fire-and-Forget"-Manier verwenden: Erstellen Sie den Knoten, rufen Sie start()
auf, um den Sound abzuspielen, und machen Sie sich nicht einmal die Mühe, eine Referenz darauf zu halten. Er wird zu einem geeigneten Zeitpunkt automatisch vom Garbage Collector bereinigt, was erst nach Abschluss der Tonwiedergabe geschieht.
Mehrfache Aufrufe von stop()
sind erlaubt. Der neueste Aufruf ersetzt den vorherigen, falls der AudioBufferSourceNode
nicht bereits das Ende des Buffers erreicht hat.
Anzahl der Eingänge | 0 |
---|---|
Anzahl der Ausgänge | 1 |
Kanalanzahl | definiert durch den zugeordneten [`AudioBuffer`](/de/docs/Web/API/AudioBuffer) |
Konstruktor
AudioBufferSourceNode()
-
Erstellt und gibt ein neues
AudioBufferSourceNode
-Objekt zurück. Alternativ können Sie die Factory-MethodeBaseAudioContext.createBufferSource()
verwenden; siehe Erstellen eines AudioNodes.
Instanzeigenschaften
Erbt Eigenschaften von seinem Elternteil, AudioScheduledSourceNode
.
AudioBufferSourceNode.buffer
-
Ein
AudioBuffer
, der das abzuspielende Audio-Asset definiert oder bei einem Wert vonnull
einen einzigen Kanal der Stille definiert (in dem jedes Sample 0,0 ist). AudioBufferSourceNode.detune
-
Ein k-rate
AudioParam
, das die Verstimmung der Wiedergabe in Cents darstellt. Dieser Wert wird mitplaybackRate
kombiniert, um die Geschwindigkeit zu bestimmen, mit der der Sound abgespielt wird. Sein Standardwert ist0
(was keine Verstimmung bedeutet), und der nominelle Bereich ist -∞ bis ∞. AudioBufferSourceNode.loop
-
Ein Boolean-Attribut, das angibt, ob das Audio-Asset 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 zu Beginn jeder Schleife die Wiedergabe am Anfang des Audio-Buffers beginnt). AudioBufferSourceNode.loopEnd
Optional-
Eine Gleitkommazahl, die die Zeit in Sekunden angibt, zu der die Wiedergabe des
AudioBuffer
stoppt und an die durchloopStart
angegebene Zeit zurückkehrt, fallsloop
true
ist. Der Standardwert ist0
. AudioBufferSourceNode.playbackRate
-
Ein k-rate
AudioParam
, das den Geschwindigkeitsfaktor definiert, mit dem das Audio-Asset abgespielt wird, wobei ein Wert von 1,0 der natürlichen Samplerate des Sounds entspricht. Da keine Tonhöhenkorrektur auf den Ausgang angewendet wird, kann dies verwendet werden, um die Tonhöhe des Samples zu ändern. Dieser Wert wird mitdetune
kombiniert, um die endgültige Wiedergabegeschwindigkeit zu bestimmen.
Instanzmethoden
Erbt Methoden von seinem Elternteil, AudioScheduledSourceNode
, und überschreibt die folgende Methode:.
start()
-
Plant die Wiedergabe der im Buffer enthaltenen Audiodaten oder beginnt sofort mit der Wiedergabe. Zusätzlich ermöglicht es das Setzen des Startoffsets und der Wiedergabedauer.
Beispiele
In diesem Beispiel erstellen wir einen Zwei-Sekunden-Buffer, füllen ihn mit weißem Rauschen und spielen ihn dann mit einem AudioBufferSourceNode
ab. Die Kommentare sollten klar erklären, was geschieht.
Hinweis: Sie können den Code auch live ausführen oder 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: Für ein Beispiel zu decodeAudioData()
siehe die Seite AudioContext.decodeAudioData()
.
Spezifikationen
Specification |
---|
Web Audio API # AudioBufferSourceNode |
Browser-Kompatibilität
BCD tables only load in the browser