Signatur
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
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));
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));
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);
// Wichtig · Fallstricke
- Nur Audio: Die Einschränkung wirkt ausschließlich bei Audiospuren. Bei Videospuren wird sie ignoriert.
- Wunsch statt Garantie: Ein einfaches
true/falseist nicht bindend. Prüfe den tatsächlich aktiven Wert immer mitgetSettings(). - Umschalten zur Laufzeit:
applyConstraints()wird für diese Eigenschaft nicht überall zuverlässig umgesetzt. Manche Browser verlangen einen neuengetUserMedia()-Aufruf. - Kombinierte Filter: In Chromium hängen
noiseSuppression,echoCancellationundautoGainControlteilweise zusammen. Für eine wirklich unbearbeitete Aufnahme solltest du alle drei auffalsesetzen. - 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.