Start · Sprachen · JavaScript · Referenz · PannerNode.coneOuterAngle

PannerNode.coneOuterAngle

Eigenschaft

Winkel in Grad (0–360) des äußeren Schallkegels einer gerichteten Quelle. Außerhalb dieses Kegels wird die Lautstärke auf <code>coneOuterGain</code> abgesenkt.

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

Signatur

PannerNode.coneOuterAngle

Beschreibung

Die Eigenschaft coneOuterAngle eines PannerNode ist eine Gleitkommazahl (double). Sie gibt in Grad an, wie weit der äußere Kegel einer gerichteten Schallquelle geöffnet ist. Zusammen mit coneInnerAngle und coneOuterGain legt sie fest, wie laut eine Quelle abhängig vom Winkel zwischen ihrer Ausrichtung (orientationX/Y/Z) und der Richtung zum Hörer (AudioListener) ist.

Die Lautstärke hängt von drei Bereichen ab:

  • Innerhalb von coneInnerAngle: keine Absenkung (Faktor 1).
  • Zwischen innerem und äußerem Winkel: Die Lautstärke geht linear von 1 auf coneOuterGain herunter.
  • Außerhalb von coneOuterAngle: konstanter Faktor coneOuterGain.

Der Winkel beschreibt die gesamte Öffnung des Kegels. Ein Wert von 180 heißt also 90° zu jeder Seite der Ausrichtungsachse. Der Standardwert 360 macht die Quelle ungerichtet: Der Kegel deckt dann alle Richtungen ab, und coneOuterGain hat keine Wirkung. Die Eigenschaft eignet sich für Lautsprecher, sprechende Figuren, Megafone oder Fahrzeuge in 3D-Szenen und Spielen, die hauptsächlich in eine Richtung abstrahlen.

Rückgabewert

Typ
number
Beschreibung
Öffnungswinkel des äußeren Kegels in Grad. Standardwert: 360. Die Eigenschaft ist les- und schreibbar.

Beispiele

Gerichteten Lautsprecher einrichten

const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });

const panner = new PannerNode(ctx, {
  panningModel: 'HRTF',
  positionX: 0, positionY: 0, positionZ: -2,
  orientationX: 0, orientationY: 0, orientationZ: 1, // zeigt zum Hörer
  coneInnerAngle: 60,
  coneOuterAngle: 120,
  coneOuterGain: 0.1
});

osc.connect(panner).connect(ctx.destination);
osc.start();
console.log(panner.coneOuterAngle);
120

Wert nachträglich ändern und auslesen

const ctx = new AudioContext();
const panner = ctx.createPanner();

console.log('Standard:', panner.coneOuterAngle);

// Quelle stärker bündeln
panner.coneInnerAngle = 30;
panner.coneOuterAngle = 90;
panner.coneOuterGain = 0.05;

console.log('Neu:', panner.coneOuterAngle);
Standard: 360 Neu: 90

Kegelbreite über einen Schieberegler steuern

// HTML: <input type="range" id="cone" min="0" max="360" value="180">
const ctx = new AudioContext();
const panner = new PannerNode(ctx, { coneInnerAngle: 0, coneOuterGain: 0 });
const slider = document.querySelector('#cone');

slider.addEventListener('input', () => {
  const outer = Number(slider.value);
  // Innerer Winkel darf den äußeren nicht überschreiten
  panner.coneInnerAngle = Math.min(panner.coneInnerAngle, outer);
  panner.coneOuterAngle = outer;
  console.log(`Äußerer Kegel: ${panner.coneOuterAngle}°`);
});
Äußerer Kegel: 180°

// Wichtig · Fallstricke

  • Kein AudioParam: Anders als positionX oder orientationX ist coneOuterAngle ein einfacher Zahlenwert. Man kann ihn also nicht mit setValueAtTime() oder linearRampToValueAtTime() automatisieren. Schnelle Sprünge können hörbar knacken.
  • Ohne Wirkung bei Standardwerten: Mit coneOuterAngle = 360 oder coneOuterGain = 1 hat die Quelle keine Richtwirkung. Auch die Ausrichtung (orientation*) muss sinnvoll gesetzt sein.
  • Gesamtwinkel, nicht Halbwinkel: Der Wert gilt für die ganze Öffnung. Die Spezifikation rechnet intern mit der Hälfte.
  • Der äußere Winkel sollte mindestens so groß sein wie coneInnerAngle. Andernfalls ist das Verhalten laut Spezifikation nicht sinnvoll definiert.
  • Kompatibilität: Wird in allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari). Sehr alte WebKit-Versionen brauchten webkitAudioContext.
  • Ein AudioContext startet meist erst nach einer Nutzeraktion (Autoplay-Richtlinie). Falls nötig, ctx.resume() in einem Klick-Handler aufrufen.