Start · Sprachen · JavaScript · Referenz · MediaTrackConstraints.noiseSuppression

MediaTrackConstraints.noiseSuppression

Eigenschaft

Legt als <code>ConstrainBoolean</code> fest, ob die Rauschunterdrückung für eine Audiospur gewünscht, bevorzugt oder zwingend ein- bzw. ausgeschaltet sein soll.

seit JavaScript Baseline: Chrome 55+, Edge 79+, Firefox 36+, Safar Kategorie: webapi

Signatur

MediaTrackConstraints.noiseSuppression

Beschreibung

Die Eigenschaft noiseSuppression des Wörterbuchs MediaTrackConstraints steuert die Rauschunterdrückung des Browsers bei Audiospuren, etwa von Mikrofonen. Die Rauschunterdrückung filtert gleichbleibende Hintergrundgeräusche heraus, zum Beispiel Lüfter, Brummen oder Straßenlärm. Sie ist Teil der Sprachverarbeitung, die Browser für Echtzeitkommunikation wie WebRTC mitbringen.

Der Wert ist ein ConstrainBoolean. Du kannst entweder direkt true oder false angeben. Das ist ein Wunsch, den der Browser nach Möglichkeit erfüllt. Alternativ übergibst du ein Objekt mit exact (zwingende Vorgabe) oder ideal (bevorzugter Wert). Kann eine exact-Vorgabe nicht erfüllt werden, scheitert getUserMedia() mit einem OverconstrainedError.

Für Sprachanrufe und Videokonferenzen ist die Rauschunterdrückung meist sinnvoll und in vielen Browsern standardmäßig aktiv. Bei Musikaufnahmen, Instrumenten-Stimmgeräten, Audioanalyse oder Aufnahmen in Studioqualität solltest du sie dagegen abschalten. Das gilt dann meist auch für echoCancellation und autoGainControl, weil diese Filter das Signal hörbar verändern.

Welcher Wert tatsächlich aktiv ist, erfährst du über MediaStreamTrack.getSettings().noiseSuppression. Ob der Browser die Einschränkung überhaupt kennt, prüfst du mit navigator.mediaDevices.getSupportedConstraints().noiseSuppression.

Parameter

Name Typ Default Beschreibung
$noiseSuppression boolean | { exact?: boolean, ideal?: boolean } browserabhängig (meist true bei Mikrofonen) true/false als Wunsch, { ideal: … } als bevorzugter Wert oder { exact: … } als zwingende Vorgabe.

Rückgabewert

Typ
ConstrainBoolean
Beschreibung
Der festgelegte Einschränkungswert: entweder ein boolean oder ein Objekt mit den Schlüsseln exact und/oder ideal.

Beispiele

Mikrofon mit Rauschunterdrückung für Sprachanrufe

const startCall = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({
    audio: {
      noiseSuppression: true,
      echoCancellation: true,
      autoGainControl: true
    }
  });
  const [track] = stream.getAudioTracks();
  console.log('Rauschunterdrückung aktiv:', track.getSettings().noiseSuppression);
  return stream;
};

startCall().catch(err => console.error(err.name, err.message));
Rauschunterdrückung aktiv: true

Unverfälschte Aufnahme für Musik mit exact-Vorgabe

const getRawAudio = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();
  if (!supported.noiseSuppression) {
    console.warn('noiseSuppression wird nicht unterstützt');
  }
  try {
    return await navigator.mediaDevices.getUserMedia({
      audio: {
        noiseSuppression: { exact: false },
        echoCancellation: false,
        autoGainControl: false
      }
    });
  } catch (err) {
    if (err.name === 'OverconstrainedError') {
      console.error('Nicht erfüllbar:', err.constraint);
    }
    throw err;
  }
};

getRawAudio().then(s => console.log('Spuren:', s.getAudioTracks().length));
Spuren: 1

Rauschunterdrückung zur Laufzeit umschalten

const toggleNoiseSuppression = async (track, enabled) => {
  await track.applyConstraints({ noiseSuppression: { ideal: enabled } });
  const { noiseSuppression } = track.getSettings();
  console.log(`Gewünscht: ${enabled}, tatsächlich: ${noiseSuppression}`);
};

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [micTrack] = stream.getAudioTracks();
await toggleNoiseSuppression(micTrack, false);
Gewünscht: false, tatsächlich: false

// Wichtig · Fallstricke

  • Nur Audio: Die Einschränkung wirkt ausschließlich bei Audiospuren. Bei Videospuren wird sie ignoriert.
  • Wunsch statt Garantie: Ein einfaches true/false ist nicht bindend. Prüfe den tatsächlich aktiven Wert immer mit getSettings().
  • Umschalten zur Laufzeit: applyConstraints() wird für diese Eigenschaft nicht überall zuverlässig umgesetzt. Manche Browser verlangen einen neuen getUserMedia()-Aufruf.
  • Kombinierte Filter: In Chromium hängen noiseSuppression, echoCancellation und autoGainControl teilweise zusammen. Für eine wirklich unbearbeitete Aufnahme solltest du alle drei auf false setzen.
  • Umgebung: Die Qualität der Rauschunterdrückung ist je nach Browser und Betriebssystem unterschiedlich. Das Betriebssystem oder der Gerätetreiber kann zusätzlich eigene Filter anwenden, die der Browser nicht abschalten kann.
  • Voraussetzungen: getUserMedia() funktioniert nur in einem sicheren Kontext (HTTPS oder localhost) und braucht die Erlaubnis der Nutzerin bzw. des Nutzers.