Signatur
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
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);
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
offsetist schreibgeschützt:source.offset = 0.5hat keine Wirkung (im Strict Mode wird einTypeErrorausgelöst). Setze stattdessensource.offset.value.- Ein direktes Setzen von
valuewird ignoriert, während eine Automation läuft. Rufe vorhercancelScheduledValues()auf oder plane die Änderung mitsetValueAtTime(). - Die Quelle gibt erst nach
start()ein Signal aus und lässt sich nur einmal starten. - Wird die Quelle mit einem
AudioParamverbunden, addiert sich ihr Signal zum intrinsischen Wert dieses Parameters. Setze den Zielparameter (z. B.gain) deshalb meist auf0. - Browser verlangen in der Regel eine Nutzerinteraktion, bevor ein
AudioContextTon ausgibt (Autoplay-Richtlinie). Gegebenenfalls istctx.resume()nötig. - Unterstützt in Chrome 56+, Firefox 52+, Safari 14.1+ und Edge 79+. Der Internet Explorer unterstützt die Eigenschaft nicht.