Start · Sprachen · JavaScript · Referenz · MediaTrackSettings.sampleSize

MediaTrackSettings.sampleSize

Eigenschaft

Ganzzahl, die angibt, mit wie vielen Bits pro Sample (lineare Samplegröße) ein Audio-<code>MediaStreamTrack</code> gerade tatsächlich arbeitet.

seit JavaScript Chromium-Browser (Chrome, Edge, Opera); nicht in F Kategorie: webapi

Signatur

MediaTrackSettings.sampleSize

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

Typ
number | undefined
Beschreibung
Ganzzahlige Samplegröße in Bits pro Sample (z. B. 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');
}
Mikrofon liefert 16 Bit pro Sample

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`);
}
Gerät liefert nur 16 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);
}
Neue Einstellung: 16

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);
Bereich: { min: 16, max: 16 } Aktuell: 16

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Chromium-Browser melden sampleSize. Firefox und Safari unterstützen die Eigenschaft bisher nicht. Prüfe den Wert deshalb immer auf undefined und frage die Unterstützung vorab mit navigator.mediaDevices.getSupportedConstraints().sampleSize ab.
  • Der Wert beschreibt die Bittiefe der Aufnahmequelle. Die Web Audio API rechnet intern trotzdem mit 32-Bit-Gleitkommazahlen. MediaRecorder kann 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. Ein exact-Wert führt dagegen zu einem OverconstrainedError.
  • getUserMedia() funktioniert nur in sicheren Kontexten (HTTPS oder localhost) und erst, nachdem der Nutzer den Zugriff erlaubt hat.
  • Bei Videotracks gibt es diese Eigenschaft nicht.