Signatur
Beschreibung
Die Eigenschaft sampleSize des Wörterbuchs MediaTrackSettings enthält die lineare Samplegröße in Bits pro Sample, mit der ein Audiotrack gerade konfiguriert ist. Typische Werte sind 16 (CD-Qualität), 24 oder 32. Der Wert beschreibt die tatsächlich verwendete Einstellung. Er ist also das Ergebnis der Aushandlung zwischen deinen Vorgaben (Constraints) und den Fähigkeiten des Geräts.
Du erhältst das Objekt über MediaStreamTrack.getSettings(). Die Eigenschaft ist nur bei Audiotracks vorhanden und nur dann, wenn Browser und Gerät sie unterstützen. Bei Videotracks oder in Browsern ohne Unterstützung fehlt sie, der Wert ist dann undefined.
Nützlich ist sampleSize zum Beispiel für Audioaufnahme-Anwendungen, Diagnoseseiten oder Werkzeuge für Musikproduktion. Dort willst du prüfen, ob die angeforderte Bittiefe wirklich erreicht wurde, bevor du aufnimmst oder die Daten weiterverarbeitest. Die gewünschte Bittiefe forderst du mit dem gleichnamigen Constraint sampleSize an, und zwar in getUserMedia() oder applyConstraints(). Die tatsächliche Einstellung liest du danach mit getSettings() aus.
Rückgabewert
16). undefined, wenn der Track kein Audiotrack ist oder der Browser bzw. das Gerät die Eigenschaft nicht meldet.Beispiele
Aktuelle Bittiefe des Mikrofons auslesen
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const { sampleSize } = track.getSettings();
if (sampleSize !== undefined) {
console.log(`Mikrofon liefert ${sampleSize} Bit pro Sample`);
} else {
console.log('sampleSize wird nicht gemeldet');
}
Höhere Bittiefe anfordern und Ergebnis prüfen
const supported = navigator.mediaDevices.getSupportedConstraints();
if (!supported.sampleSize) {
console.warn('Constraint sampleSize wird nicht unterstützt');
} else {
const stream = await navigator.mediaDevices.getUserMedia({
audio: { sampleSize: { ideal: 24 } }
});
const [track] = stream.getAudioTracks();
const actual = track.getSettings().sampleSize;
console.log(actual === 24
? '24-Bit-Aufnahme aktiv'
: `Gerät liefert nur ${actual} Bit`);
}
Bittiefe nachträglich mit applyConstraints ändern
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
try {
await track.applyConstraints({ sampleSize: { exact: 16 } });
console.log('Neue Einstellung:', track.getSettings().sampleSize);
} catch (err) {
// OverconstrainedError, wenn 16 Bit nicht möglich sind
console.error(err.name, err.constraint);
}
Mögliche Werte über getCapabilities ermitteln
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const caps = track.getCapabilities?.() ?? {};
console.log('Bereich:', caps.sampleSize); // z. B. { min: 16, max: 16 }
console.log('Aktuell:', track.getSettings().sampleSize);
// Wichtig · Fallstricke
- Browser-Kompatibilität: Chromium-Browser melden
sampleSize. Firefox und Safari unterstützen die Eigenschaft bisher nicht. Prüfe den Wert deshalb immer aufundefinedund frage die Unterstützung vorab mitnavigator.mediaDevices.getSupportedConstraints().sampleSizeab. - Der Wert beschreibt die Bittiefe der Aufnahmequelle. Die Web Audio API rechnet intern trotzdem mit 32-Bit-Gleitkommazahlen.
MediaRecorderkann je nach Codec (z. B. Opus) mit einer anderen Bittiefe kodieren. - Viele Mikrofone und Betriebssystem-Treiber liefern nur 16 Bit. Ein
ideal-Wert von 24 wird dann stillschweigend ignoriert. Einexact-Wert führt dagegen zu einemOverconstrainedError. getUserMedia()funktioniert nur in sicheren Kontexten (HTTPS oderlocalhost) und erst, nachdem der Nutzer den Zugriff erlaubt hat.- Bei Videotracks gibt es diese Eigenschaft nicht.