Start · Sprachen · JavaScript · Referenz · PannerNode.coneInnerAngle

PannerNode.coneInnerAngle

Eigenschaft

Winkel in Grad (Standard <code>360</code>), innerhalb dessen eine gerichtete Schallquelle eines <code>PannerNode</code> ohne Lautstärkeabsenkung zu hören ist.

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

Signatur

PannerNode.coneInnerAngle

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

Typ
number
Beschreibung
Der aktuelle innere Kegelwinkel in Grad (double).

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);
60

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);
360 30

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 60 gilt volle Lautstärke in ±30° um die Ausrichtung.
  • Solange coneInnerAngle und coneOuterAngle beide bei 360 stehen, hat der Kegel keinerlei Wirkung. Die Ausrichtung (orientationX/Y/Z) ist ebenfalls wichtig. Ein Nullvektor bedeutet, dass die Quelle keine Richtung hat.
  • coneInnerAngle sollte nicht größer sein als coneOuterAngle, sonst ist das Ergebnis nicht klar festgelegt.
  • Es handelt sich um eine einfache Zahl und nicht um einen AudioParam. Automatisierungen wie linearRampToValueAtTime sind daher nicht möglich. Änderungen greifen sofort.
  • Die Eigenschaft wird in allen modernen Browsern unterstützt. Ältere WebKit-Versionen brauchten webkitAudioContext. Browser-Richtlinien lassen einen AudioContext meist erst nach einer Nutzerinteraktion starten; notfalls hilft ctx.resume().