Signatur
Beschreibung
sampleRate gehört zum Interface AudioData der WebCodecs API. Die Eigenschaft gibt an, mit wie vielen Samples pro Sekunde und Kanal die enthaltenen Audiodaten abgetastet wurden, z. B. 44100 oder 48000. Der Wert wird beim Erzeugen des Objekts festgelegt, entweder über das Init-Objekt des Konstruktors new AudioData(init) oder durch einen AudioDecoder.
Braucht man vor allem, um die Dauer eines Blocks auszurechnen (numberOfFrames / sampleRate), um Zeitstempel zu berechnen, Resampling vorzubereiten oder zu prüfen, ob die Daten zu einem AudioContext bzw. einer AudioEncoder-Konfiguration passen.
Die Eigenschaft ist schreibgeschützt. Eine andere Abtastrate bekommt man nur über ein neues AudioData-Objekt mit umgerechneten (resampelten) Daten. Nach close() ist das Objekt geschlossen, und sampleRate liefert dann 0.
Beispiele
AudioData erzeugen und Abtastrate auslesen
// 10 ms Stille in Stereo bei 48 kHz
const sampleRate = 48000;
const numberOfFrames = sampleRate / 100; // 480
const numberOfChannels = 2;
const audioData = new AudioData({
format: 'f32-planar',
sampleRate,
numberOfFrames,
numberOfChannels,
timestamp: 0,
data: new Float32Array(numberOfFrames * numberOfChannels)
});
console.log(audioData.sampleRate);
audioData.close();
Dauer eines Blocks aus sampleRate berechnen
const describe = (audioData) => {
const durationMs = (audioData.numberOfFrames / audioData.sampleRate) * 1000;
return `${audioData.sampleRate} Hz, ${audioData.numberOfFrames} Frames = ${durationMs.toFixed(2)} ms`;
};
const chunk = new AudioData({
format: 'f32',
sampleRate: 44100,
numberOfFrames: 1024,
numberOfChannels: 1,
timestamp: 0,
data: new Float32Array(1024)
});
console.log(describe(chunk));
// Die Eigenschaft 'duration' liefert Mikrosekunden
console.log(chunk.duration);
chunk.close();
Dekodierte Daten mit dem AudioContext abgleichen
const ctx = new AudioContext();
const decoder = new AudioDecoder({
output: (audioData) => {
if (audioData.sampleRate !== ctx.sampleRate) {
console.warn(`Resampling nötig: ${audioData.sampleRate} Hz → ${ctx.sampleRate} Hz`);
}
audioData.close(); // Speicher sofort freigeben
},
error: (e) => console.error('Dekodierfehler:', e)
});
decoder.configure({ codec: 'opus', sampleRate: 48000, numberOfChannels: 2 });
Verhalten nach close()
const data = new AudioData({
format: 's16',
sampleRate: 16000,
numberOfFrames: 160,
numberOfChannels: 1,
timestamp: 0,
data: new Int16Array(160)
});
console.log(data.sampleRate);
data.close();
console.log(data.sampleRate);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
audioData.sampleRate = 44100wird ignoriert und wirft im Strict Mode einenTypeError. Resampling erfordert ein neuesAudioData-Objekt. - Nach
close()gibt die Eigenschaft0. Wer mitsampleRateteilt, sollte deshalb vorher prüfen, ob das Objekt noch offen ist, sonst kommtInfinitybzw.NaNheraus. - Die Abtastrate gilt pro Kanal. Die Gesamtzahl der Samples ist
numberOfFrames × numberOfChannels. - Ein Decoder kann eine andere Abtastrate ausgeben als konfiguriert. Opus wird zum Beispiel oft mit 48 kHz dekodiert. Lies deshalb immer
sampleRatedes Ausgabeobjekts aus. - Kompatibilität: WebCodecs gibt es nur in sicheren Kontexten (HTTPS) und in Window- sowie Worker-Umgebungen. Chromium unterstützt die API seit Version 94, Firefox seit 130. Safari unterstützt
AudioDataerst in neueren Versionen. Prüfe die Verfügbarkeit mit'AudioData' in globalThis.