Start · Sprachen · JavaScript · Referenz · new AudioBuffer()

new AudioBuffer()

Methode

Erstellt ein neues, mit Stille gefülltes <code>AudioBuffer</code>-Objekt mit festgelegter Kanalanzahl, Länge und Abtastrate für die Web Audio API.

seit JavaScript Baseline: alle modernen Browser (Konstruktor seit Kategorie: webapi

Signatur

new AudioBuffer(options)

Beschreibung

Der Konstruktor new AudioBuffer() erzeugt einen Audiopuffer im Arbeitsspeicher, also eine Folge von PCM-Samples im 32-Bit-Gleitkommaformat, getrennt nach Kanälen. Anfangs enthalten alle Samples den Wert 0, der Puffer ist also still. Die Daten schreibt man anschließend über getChannelData() oder copyToChannel() hinein.

Ein AudioBuffer ist nicht an einen bestimmten AudioContext gebunden. Man kann ihn also schon vorab erzeugen und später in einem beliebigen Kontext mit einer AudioBufferSourceNode abspielen oder einer ConvolverNode als Impulsantwort übergeben. Stimmt die Abtastrate des Puffers nicht mit der des Kontexts überein, rechnet der Browser beim Abspielen automatisch um.

Typische Anwendungsfälle sind synthetisch erzeugte Klänge (Rauschen, Sinustöne, Klicks), kurze Soundeffekte, Impulsantworten für Hall oder das Zusammenstellen und Weiterbearbeiten von Audiodaten. Ältere Code-Beispiele nutzen dafür oft AudioContext.createBuffer(). Das Ergebnis ist dasselbe, der Konstruktor braucht aber keinen Kontext.

Parameter

Name Typ Default Beschreibung
$options Pflicht Object Konfigurationsobjekt mit den Eigenschaften length, sampleRate und optional numberOfChannels.
$options.length Pflicht number Länge des Puffers in Sample-Frames. Muss mindestens 1 sein. Die Dauer in Sekunden ergibt sich aus length / sampleRate.
$options.sampleRate Pflicht number Abtastrate in Hz. Browser müssen mindestens den Bereich 8000–96000 unterstützen, viele erlauben 3000–768000.
$options.numberOfChannels number 1 Anzahl der Audiokanäle, z. B. 1 für Mono und 2 für Stereo. Mindestens 32 Kanäle müssen möglich sein.

Rückgabewert

Typ
AudioBuffer
Beschreibung
Ein neues AudioBuffer-Objekt, dessen Samples alle mit 0 (Stille) belegt sind.

Beispiele

Leeren Stereo-Puffer anlegen und Eigenschaften prüfen

// 2 Sekunden Stereo bei 44,1 kHz
const buffer = new AudioBuffer({
  numberOfChannels: 2,
  length: 44100 * 2,
  sampleRate: 44100
});

console.log(buffer.numberOfChannels);
console.log(buffer.length);
console.log(buffer.duration);
console.log(buffer.getChannelData(0)[0]);
2 88200 2 0

Weißes Rauschen erzeugen und abspielen

const ctx = new AudioContext();

const noise = new AudioBuffer({
  length: ctx.sampleRate, // 1 Sekunde
  sampleRate: ctx.sampleRate
});

// Samples zwischen -1 und 1 zufällig befüllen
const data = noise.getChannelData(0);
for (let i = 0; i < data.length; i++) {
  data[i] = Math.random() * 2 - 1;
}

document.querySelector('#play').addEventListener('click', async () => {
  await ctx.resume(); // Autoplay-Sperre aufheben
  const source = new AudioBufferSourceNode(ctx, { buffer: noise });
  source.connect(ctx.destination);
  source.start();
});

Sinuston (440 Hz) mit copyToChannel schreiben

const sampleRate = 48000;
const seconds = 0.5;
const frequency = 440;

const tone = new AudioBuffer({
  numberOfChannels: 2,
  length: sampleRate * seconds,
  sampleRate
});

const samples = new Float32Array(tone.length);
for (let i = 0; i < samples.length; i++) {
  samples[i] = 0.3 * Math.sin(2 * Math.PI * frequency * i / sampleRate);
}

// dieselben Daten in beide Kanäle kopieren
tone.copyToChannel(samples, 0);
tone.copyToChannel(samples, 1);

console.log(tone.duration.toFixed(2));
0.50

// Wichtig · Fallstricke

  • Pflichtfelder: Fehlen length oder sampleRate, wirft der Konstruktor einen TypeError. Bei length: 0, einer nicht unterstützten Abtastrate oder einer ungültigen Kanalanzahl kommt ein NotSupportedError (DOMException).
  • Wertebereich: Samples sollten zwischen -1.0 und 1.0 liegen. Werte außerhalb dieses Bereichs werden bei der Ausgabe abgeschnitten und klingen verzerrt.
  • Speicherbedarf: Jedes Sample braucht 4 Byte. Eine Minute Stereo bei 48 kHz sind schon rund 23 MB. Lange Audiodateien daher lieber mit einem <audio>-Element und MediaElementAudioSourceNode streamen.
  • Dateien laden: Für MP3, WAV oder OGG nimmt man nicht diesen Konstruktor, sondern AudioContext.decodeAudioData().
  • Autoplay: Den Puffer kann man jederzeit erzeugen. Abspielen klappt in den meisten Browsern aber erst nach einer Nutzeraktion, z. B. einem Klick.
  • Kompatibilität: Den Konstruktor gibt es in allen aktuellen Browsern (Chrome 55+, Firefox 53+, Safari 14.1+). Für sehr alte Browser ist AudioContext.createBuffer() der Ersatz.