Signatur
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
48000. Nur lesbar.Beispiele
Abtastrate des Standardkontexts auslesen
const ctx = new AudioContext();
console.log(`Abtastrate: ${ctx.sampleRate} 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);
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`);
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);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung an
ctx.sampleRatewird ohne Fehlermeldung ignoriert (im Strict Mode gibt es einenTypeError). 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 oft48000, manchmal auch96000. Berechne Puffergrößen und Frequenzen immer aussampleRate. - 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
sampleRateim Konstruktor vonAudioContextkam in älteren Safari-Versionen erst spät hinzu, ältere WebKit-Versionen brauchen außerdem nochwebkitAudioContext. - Datenschutz: Die Rate des Ausgabegeräts kann zum Browser-Fingerprinting beitragen.