Start · Sprachen · JavaScript · Referenz · BaseAudioContext.sampleRate

BaseAudioContext.sampleRate

Eigenschaft

Liefert die Abtastrate (Samples pro Sekunde) als Gleitkommazahl, mit der alle Knoten eines <code>AudioContext</code> oder <code>OfflineAudioContext</code> arbeiten.

seit JavaScript Baseline: alle modernen Browser (Web Audio API) Kategorie: webapi

Signatur

BaseAudioContext.sampleRate

Beschreibung

Die schreibgeschützte Eigenschaft sampleRate gibt an, mit wie vielen Samples pro Sekunde ein Audiokontext intern rechnet, typischerweise 44100 oder 48000 Hz. Alle AudioNode-Objekte in diesem Kontext verarbeiten Audio mit genau dieser Rate. Kommen Daten mit einer anderen Rate hinein, etwa beim Dekodieren einer Datei mit decodeAudioData(), rechnet der Browser sie automatisch auf diese Rate um.

Den Wert brauchst du vor allem, wenn du Audiodaten selbst erzeugst oder auswertest. Das betrifft zum Beispiel die Größe eines AudioBuffer (Dauer × sampleRate), die Umrechnung von FFT-Bins eines AnalyserNode in Frequenzen und DSP-Code in einem AudioWorkletProcessor. Im Worklet steht dafür die globale Variable sampleRate bereit.

Die Rate wird beim Erzeugen des Kontexts festgelegt und ändert sich danach nicht mehr. Bei new AudioContext({ sampleRate }) kannst du eine Wunschrate angeben. Ohne Angabe nimmt der Browser meist die Rate des Standard-Ausgabegeräts. Bei einem OfflineAudioContext musst du die Rate im Konstruktor angeben.

Rückgabewert

Typ
number
Beschreibung
Die Abtastrate in Hertz (Samples pro Sekunde) als Gleitkommazahl, z. B. 48000. Nur lesbar.

Beispiele

Abtastrate des Standardkontexts auslesen

const ctx = new AudioContext();
console.log(`Abtastrate: ${ctx.sampleRate} Hz`);
Abtastrate: 48000 Hz

Puffer mit 1 Sekunde Sinuston erzeugen

const ctx = new AudioContext();
const dauer = 1; // Sekunden
const frequenz = 440;
const buffer = ctx.createBuffer(1, ctx.sampleRate * dauer, ctx.sampleRate);
const daten = buffer.getChannelData(0);

for (let i = 0; i < daten.length; i++) {
  daten[i] = Math.sin(2 * Math.PI * frequenz * i / ctx.sampleRate) * 0.2;
}

const quelle = ctx.createBufferSource();
quelle.buffer = buffer;
quelle.connect(ctx.destination);
quelle.start();
console.log(buffer.length, buffer.duration);
48000 1

FFT-Bin in Frequenz umrechnen

const ctx = new AudioContext();
const analyser = ctx.createAnalyser();
analyser.fftSize = 2048;

// Frequenzauflösung pro Bin
const binBreite = ctx.sampleRate / analyser.fftSize;
const binZuHz = (index) => index * binBreite;

console.log(`Bin 10 ≈ ${binZuHz(10).toFixed(1)} Hz`);
Bin 10 ≈ 234.4 Hz

Wunschrate beim Erzeugen festlegen

const ctx = new AudioContext({ sampleRate: 16000 });
console.log(ctx.sampleRate);

const offline = new OfflineAudioContext(2, 44100 * 5, 44100);
console.log(offline.sampleRate);
16000 44100

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an ctx.sampleRate wird ohne Fehlermeldung ignoriert (im Strict Mode gibt es einen TypeError). Wenn du eine andere Rate brauchst, musst du einen neuen Kontext erzeugen.
  • Nicht fest einprogrammieren: Verlass dich nicht auf 44100. Je nach Gerät und Betriebssystem ist der Wert oft 48000, manchmal auch 96000. Berechne Puffergrößen und Frequenzen immer aus sampleRate.
  • Erlaubter Bereich: Laut Spezifikation müssen Browser mindestens 8000 bis 96000 Hz unterstützen, viele erlauben 3000 bis 768000 Hz. Werte außerhalb des Bereichs führen im Konstruktor zu einem NotSupportedError.
  • Kompatibilität: Die Eigenschaft wird überall unterstützt. Die Option sampleRate im Konstruktor von AudioContext kam in älteren Safari-Versionen erst spät hinzu, ältere WebKit-Versionen brauchen außerdem noch webkitAudioContext.
  • Datenschutz: Die Rate des Ausgabegeräts kann zum Browser-Fingerprinting beitragen.