Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.echoCancellation

MediaTrackSupportedConstraints.echoCancellation

Eigenschaft

Boolean-Eigenschaft, die angibt, ob der Browser die Constraint <code>echoCancellation</code> (Echounterdrückung) für Audiospuren unterstützt.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.echoCancellation

Beschreibung

Die Eigenschaft echoCancellation gehört zum Wörterbuch MediaTrackSupportedConstraints. Ein solches Objekt liefert navigator.mediaDevices.getSupportedConstraints(). Kennt der Browser die Constraint echoCancellation, steht die Eigenschaft im Objekt und hat den Wert true. Kennt er sie nicht, fehlt die Eigenschaft ganz, und beim Auslesen erhältst du undefined. Den Wert false gibt es hier nicht.

Echounterdrückung sorgt dafür, dass der Ton aus den Lautsprechern nicht über das Mikrofon wieder aufgenommen wird. Das brauchst du vor allem bei Videokonferenzen, Sprachchats und WebRTC-Anwendungen. Für Musik- oder Aufnahme-Apps schaltet man sie oft bewusst ab, damit das Signal unverfälscht bleibt.

Wichtig: Die Eigenschaft sagt nur, ob der Browser die Constraint grundsätzlich kennt. Ob das Gerät oder die aktuelle Spur Echounterdrückung wirklich anbietet, erfährst du über MediaStreamTrack.getCapabilities(). Welcher Wert gerade aktiv ist, zeigt MediaStreamTrack.getSettings().

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn der Browser die Constraint echoCancellation unterstützt. Sonst fehlt die Eigenschaft, und beim Auslesen erhältst du undefined.

Beispiele

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.echoCancellation) {
  console.log('Echounterdrückung wird unterstützt.');
} else {
  console.log('Echounterdrückung wird nicht unterstützt.');
}
Echounterdrückung wird unterstützt.

Mikrofon für Sprachchat mit Echounterdrückung öffnen

const openMicrophone = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();

  const audio = supported.echoCancellation
    ? { echoCancellation: true, noiseSuppression: true }
    : true;

  const stream = await navigator.mediaDevices.getUserMedia({ audio });
  const [track] = stream.getAudioTracks();
  console.log('Aktiv:', track.getSettings().echoCancellation);
  return stream;
};

openMicrophone().catch((err) => console.error('Kein Mikrofonzugriff:', err.name));
Aktiv: true

Echounterdrückung für Musikaufnahme abschalten

const startRecording = async () => {
  const { echoCancellation } = navigator.mediaDevices.getSupportedConstraints();
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const [track] = stream.getAudioTracks();

  if (echoCancellation) {
    // Unverfälschtes Signal für Instrumentenaufnahme
    await track.applyConstraints({ echoCancellation: false, autoGainControl: false });
  }
  console.log(track.getSettings().echoCancellation);
  return stream;
};

startRecording();
false

// Wichtig · Fallstricke

  • Unterstützung heißt nicht Verfügbarkeit: true bedeutet nur, dass der Browser die Constraint kennt. Ob das Gerät sie wirklich umsetzt, prüfst du mit track.getCapabilities().echoCancellation. Den tatsächlich aktiven Wert liefert track.getSettings().
  • Nie false: Nicht unterstützte Constraints fehlen einfach im Objekt. Prüfe deshalb auf truthy oder mit 'echoCancellation' in supported, aber nicht auf === false.
  • Voreinstellung: In den meisten Browsern ist die Echounterdrückung beim Mikrofonzugriff standardmäßig eingeschaltet. Für Aufnahmen in Musikqualität musst du sie ausdrücklich abschalten.
  • Sicherer Kontext: navigator.mediaDevices gibt es nur über HTTPS oder unter localhost. In unsicheren Kontexten ist es undefined.
  • Neuere Spezifikationen erlauben für echoCancellation auch Zeichenketten wie "all" oder "remote-only". Diese werden aber bisher kaum von Browsern unterstützt.