Start · Sprachen · JavaScript · Referenz · WaveShaperNode.oversample

WaveShaperNode.oversample

Eigenschaft

Legt fest, ob und wie stark ein <code>WaveShaperNode</code> das Signal vor der Verzerrung hochtastet (Oversampling), um Aliasing zu verringern.

seit JavaScript Baseline: alle modernen Browser (Web Audio API) Kategorie: webapi

Signatur

WaveShaperNode.oversample

Beschreibung

Die Eigenschaft oversample eines WaveShaperNode ist ein Aufzählungswert vom Typ OverSampleType. Sie bestimmt, ob das Eingangssignal vor dem Anwenden der Verzerrungskurve (curve) auf eine höhere Abtastrate hochgerechnet wird. Mögliche Werte sind "none" (Standard), "2x" und "4x".

Nichtlineare Verzerrung erzeugt Obertöne, die oberhalb der Nyquist-Frequenz (halbe Abtastrate) liegen können. Ohne Oversampling werden diese Frequenzen in den hörbaren Bereich zurückgespiegelt – es entsteht Aliasing, das metallisch oder kratzig klingt. Mit "2x" bzw. "4x" wird das Signal intern hochgetastet, verzerrt, tiefpassgefiltert und wieder heruntergetastet. Das Ergebnis klingt sauberer, kostet aber mehr Rechenzeit.

Verwende "none" bei milder Sättigung oder wenn CPU-Leistung knapp ist, und "4x" bei harter Verzerrung (z. B. Gitarren-Distortion, Bitcrusher-ähnliche Kurven), wo Aliasing deutlich hörbar wäre. Die Eigenschaft kann jederzeit gelesen und gesetzt werden, auch während die Wiedergabe läuft.

Parameter

Name Typ Default Beschreibung
$value "none" | "2x" | "4x" "none" Beim Setzen: der gewünschte Oversampling-Modus. "none" = kein Oversampling, "2x" = doppelte, "4x" = vierfache interne Abtastrate.

Rückgabewert

Typ
string ("none" | "2x" | "4x")
Beschreibung
Der aktuell eingestellte Oversampling-Modus des Knotens.

Beispiele

Oversampling beim Erstellen einer Verzerrung setzen

const ctx = new AudioContext();
const shaper = ctx.createWaveShaper();

// Klassische Sättigungskurve erzeugen
const makeCurve = (amount = 50, samples = 44100) => {
  const curve = new Float32Array(samples);
  const deg = Math.PI / 180;
  for (let i = 0; i < samples; i++) {
    const x = (i * 2) / samples - 1;
    curve[i] = ((3 + amount) * x * 20 * deg) / (Math.PI + amount * Math.abs(x));
  }
  return curve;
};

shaper.curve = makeCurve(400);
shaper.oversample = '4x'; // harte Verzerrung → Aliasing vermeiden

console.log(shaper.oversample);
4x

Über den Konstruktor mit Optionen

const ctx = new AudioContext();
const shaper = new WaveShaperNode(ctx, {
  curve: new Float32Array([-1, 0, 1]),
  oversample: '2x'
});

console.log(shaper.oversample);
2x

Qualität per Auswahlfeld umschalten

// <select id="quality"><option>none</option><option>2x</option><option>4x</option></select>
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { type: 'sawtooth', frequency: 220 });
const shaper = new WaveShaperNode(ctx, { curve: new Float32Array([-1, -0.9, 0, 0.9, 1]) });

osc.connect(shaper).connect(ctx.destination);

document.querySelector('#quality').addEventListener('change', (e) => {
  shaper.oversample = e.target.value; // live während der Wiedergabe änderbar
  console.log(`Oversampling: ${shaper.oversample}`);
});

document.addEventListener('click', () => { ctx.resume(); osc.start(); }, { once: true });
Oversampling: 4x

Ungültige Werte werden ignoriert

const ctx = new AudioContext();
const shaper = ctx.createWaveShaper();

shaper.oversample = '8x'; // kein gültiger OverSampleType
console.log(shaper.oversample);
none

// Wichtig · Fallstricke

  • Ungültige Werte: Das Zuweisen eines Strings außerhalb von "none", "2x", "4x" wirft keinen Fehler, sondern wird stillschweigend ignoriert (Verhalten von WebIDL-Enums). Im Konstruktor (new WaveShaperNode(ctx, { oversample: '8x' })) wird dagegen ein TypeError ausgelöst.
  • Performance: "4x" erhöht die CPU-Last merklich, besonders bei vielen parallelen Knoten oder auf Mobilgeräten. Nur einsetzen, wo Aliasing tatsächlich hörbar ist.
  • Latenz: Die für Oversampling nötigen Filter können je nach Implementierung eine geringe zusätzliche Verzögerung verursachen.
  • Ohne gesetzte curve hat oversample keine Wirkung – das Signal wird unverändert durchgereicht.
  • Kompatibilität: In allen aktuellen Browsern (Chrome, Firefox, Safari, Edge) verfügbar; ältere Safari-Versionen benötigten webkitAudioContext. Der AudioContext startet wegen Autoplay-Richtlinien meist erst nach einer Nutzerinteraktion.