Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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.

EventTarget AudioNode AudioScheduledSourceNode AudioBufferSourceNode

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.

Der AudioBufferSourceNode übernimmt den Inhalt eines AudioBuffer und m

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-Methode BaseAudioContext.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 auf null gesetzt, wird ein einzelner Kanal mit Stille festgelegt (in dem jeder Sample-Wert 0,0 ist).

AudioBufferSourceNode.detune Schreibgeschützt

Ein k-rate-AudioParam, der die Verstimmung der Wiedergabe in Cent angibt. Dieser Wert wird mit playbackRate kombiniert, um die Wiedergabegeschwindigkeit zu bestimmen. Der Standardwert ist 0 (keine Verstimmung); der nominelle Wertebereich reicht von −∞ bis ∞.

AudioBufferSourceNode.loop

Ein boolesches Attribut, das angibt, ob die Audiodaten nach Erreichen des Endes des AudioBuffer erneut abgespielt werden sollen. Der Standardwert ist false.

AudioBufferSourceNode.loopStart Optional

Ein Gleitkommawert, der den Zeitpunkt in Sekunden angibt, an dem die Wiedergabe des AudioBuffer beginnen soll, wenn loop den Wert true hat. Der Standardwert ist 0 (die Wiedergabe beginnt bei jeder Wiederholung am Anfang des Audio-Buffers).

AudioBufferSourceNode.loopEnd Optional

Ein Gleitkommawert, der den Zeitpunkt in Sekunden angibt, an dem die Wiedergabe des AudioBuffer endet und zu dem durch loopStart angegebenen Zeitpunkt zurückspringt, wenn loop den Wert true hat. Der Standardwert ist 0.

AudioBufferSourceNode.playbackRate Schreibgeschü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 mit detune kombiniert, 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.

js
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

Browser-Kompatibilität

Siehe auch