Start · Sprachen · JavaScript · Referenz · ConstantSourceNode.offset

ConstantSourceNode.offset

Eigenschaft

Schreibgeschützte Eigenschaft, die den <code>AudioParam</code> (a-rate) liefert, dessen Wert die <code>ConstantSourceNode</code> dauerhaft als Ausgangssignal erzeugt.

seit JavaScript Baseline: alle modernen Browser (seit 2020) Kategorie: webapi

Signatur

ConstantSourceNode.offset

Beschreibung

Die Eigenschaft offset einer ConstantSourceNode gibt ein AudioParam-Objekt zurück. Dessen Wert gibt die Quelle für jedes Sample unverändert aus. Das Ergebnis ist ein konstantes Gleichspannungssignal (DC). Es handelt sich um einen a-rate-Parameter, der also pro Sample ausgewertet wird. Der Standardwert ist 1.

Eine Zuweisung an offset selbst ist nicht möglich. Den Wert änderst du über das AudioParam-Objekt: entweder direkt mit offset.value oder zeitgesteuert mit Automationsmethoden wie setValueAtTime(), linearRampToValueAtTime() oder setTargetAtTime(). Außerdem kannst du andere Knoten (zum Beispiel einen LFO-Oszillator) mit connect() an offset anschließen und so das Signal modulieren.

Typischer Einsatz: Du verbindest eine ConstantSourceNode mit mehreren anderen AudioParams, etwa mit den gain-Parametern mehrerer GainNodes. Dann steuert eine einzige Änderung von offset alle diese Parameter gleichzeitig und exakt synchron, zum Beispiel als Master-Lautstärke oder gemeinsame Hüllkurve.

Rückgabewert

Typ
AudioParam
Beschreibung
Ein AudioParam mit defaultValue 1, automationRate "a-rate" und einem Wertebereich von etwa ±3,4028235e38 (größte 32-Bit-Gleitkommazahl).

Beispiele

Offset-Wert lesen und setzen

const ctx = new AudioContext();
const source = new ConstantSourceNode(ctx, { offset: 0.5 });

console.log(source.offset.value);        // Startwert
console.log(source.offset.defaultValue); // Standardwert

source.offset.value = 0.25;
console.log(source.offset.value);
0.5 1 0.25

Mehrere GainNodes synchron steuern

const ctx = new AudioContext();
const master = ctx.createConstantSource();
master.offset.value = 0.8;

const osc1 = new OscillatorNode(ctx, { frequency: 220 });
const osc2 = new OscillatorNode(ctx, { frequency: 330 });
const gain1 = new GainNode(ctx, { gain: 0 });
const gain2 = new GainNode(ctx, { gain: 0 });

// Der Offset wird auf den Grundwert (0) der Gain-Parameter addiert
master.connect(gain1.gain);
master.connect(gain2.gain);

osc1.connect(gain1).connect(ctx.destination);
osc2.connect(gain2).connect(ctx.destination);

osc1.start();
osc2.start();
master.start();

// Eine einzige Änderung blendet beide Stimmen gleichzeitig aus
master.offset.linearRampToValueAtTime(0, ctx.currentTime + 2);

Offset mit einem LFO modulieren (Tremolo)

const ctx = new AudioContext();
const carrier = new OscillatorNode(ctx, { frequency: 440 });
const amp = new GainNode(ctx, { gain: 0 });

const base = new ConstantSourceNode(ctx, { offset: 0.5 });
const lfo = new OscillatorNode(ctx, { frequency: 5 });
const lfoDepth = new GainNode(ctx, { gain: 0.3 });

// LFO moduliert den Offset: 0.5 ± 0.3
lfo.connect(lfoDepth).connect(base.offset);
base.connect(amp.gain);
carrier.connect(amp).connect(ctx.destination);

[carrier, base, lfo].forEach((node) => node.start());

// Wichtig · Fallstricke

  • offset ist schreibgeschützt: source.offset = 0.5 hat keine Wirkung (im Strict Mode wird ein TypeError ausgelöst). Setze stattdessen source.offset.value.
  • Ein direktes Setzen von value wird ignoriert, während eine Automation läuft. Rufe vorher cancelScheduledValues() auf oder plane die Änderung mit setValueAtTime().
  • Die Quelle gibt erst nach start() ein Signal aus und lässt sich nur einmal starten.
  • Wird die Quelle mit einem AudioParam verbunden, addiert sich ihr Signal zum intrinsischen Wert dieses Parameters. Setze den Zielparameter (z. B. gain) deshalb meist auf 0.
  • Browser verlangen in der Regel eine Nutzerinteraktion, bevor ein AudioContext Ton ausgibt (Autoplay-Richtlinie). Gegebenenfalls ist ctx.resume() nötig.
  • Unterstützt in Chrome 56+, Firefox 52+, Safari 14.1+ und Edge 79+. Der Internet Explorer unterstützt die Eigenschaft nicht.