Signatur
Beschreibung
Die Eigenschaft coneInnerAngle eines PannerNode legt zusammen mit coneOuterAngle und coneOuterGain den Schallkegel einer gerichteten Klangquelle fest. Der Wert ist eine Gleitkommazahl in Grad. Er beschreibt den gesamten Öffnungswinkel des inneren Kegels, der sich um die Richtung aus orientationX/orientationY/orientationZ legt.
Befindet sich der Hörer (AudioListener) innerhalb dieses inneren Kegels, spielt die Quelle mit voller Lautstärke. Zwischen innerem und äußerem Kegel wird die Lautstärke linear bis auf coneOuterGain abgesenkt. Außerhalb des äußeren Kegels gilt dann durchgehend coneOuterGain.
Einsetzen lässt sich das bei Spielen, VR/WebXR oder räumlichen Audio-Visualisierungen. Typische Beispiele sind ein Lautsprecher, eine sprechende Figur oder ein Megafon, deren Klang vor allem in eine Richtung abgestrahlt wird. Der Standardwert 360 bedeutet: Die Quelle strahlt in alle Richtungen gleich ab, der Kegel hat also keine Wirkung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | 360 | Beim Setzen: Öffnungswinkel des inneren Kegels in Grad (sinnvoll ist 0–360). Es ist ein normaler Zahlenwert und kein AudioParam. |
Rückgabewert
Beispiele
Gerichteten Lautsprecher einrichten
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });
const panner = new PannerNode(ctx, {
panningModel: 'HRTF',
orientationX: 0,
orientationY: 0,
orientationZ: -1, // Quelle zeigt in -Z-Richtung
coneInnerAngle: 60, // volle Lautstärke in ±30°
coneOuterAngle: 180, // danach Absenkung bis ±90°
coneOuterGain: 0.1 // außerhalb nur 10 % Lautstärke
});
osc.connect(panner).connect(ctx.destination);
osc.start();
console.log(panner.coneInnerAngle);
Wert nachträglich lesen und ändern
const ctx = new AudioContext();
const panner = ctx.createPanner();
console.log(panner.coneInnerAngle); // Standardwert
// Kegel enger machen, z. B. für ein Megafon
panner.coneInnerAngle = 30;
panner.coneOuterAngle = 90;
panner.coneOuterGain = 0;
console.log(panner.coneInnerAngle);
Kegel per Schieberegler steuern
// <input type="range" id="inner" min="0" max="360" value="360">
const ctx = new AudioContext();
const panner = new PannerNode(ctx, { coneOuterAngle: 360, coneOuterGain: 0.2 });
document.querySelector('#inner').addEventListener('input', (e) => {
const inner = Number(e.target.value);
panner.coneInnerAngle = inner;
// äußerer Winkel sollte nicht kleiner als der innere sein
panner.coneOuterAngle = Math.max(inner, panner.coneOuterAngle);
});
// Wichtig · Fallstricke
- Der Winkel beschreibt den gesamten Öffnungswinkel und nicht den halben: Bei
60gilt volle Lautstärke in ±30° um die Ausrichtung. - Solange
coneInnerAngleundconeOuterAnglebeide bei360stehen, hat der Kegel keinerlei Wirkung. Die Ausrichtung (orientationX/Y/Z) ist ebenfalls wichtig. Ein Nullvektor bedeutet, dass die Quelle keine Richtung hat. coneInnerAnglesollte nicht größer sein alsconeOuterAngle, sonst ist das Ergebnis nicht klar festgelegt.- Es handelt sich um eine einfache Zahl und nicht um einen
AudioParam. Automatisierungen wielinearRampToValueAtTimesind daher nicht möglich. Änderungen greifen sofort. - Die Eigenschaft wird in allen modernen Browsern unterstützt. Ältere WebKit-Versionen brauchten
webkitAudioContext. Browser-Richtlinien lassen einenAudioContextmeist erst nach einer Nutzerinteraktion starten; notfalls hilftctx.resume().