Signatur
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
coneOuterGainherunter. - Außerhalb von
coneOuterAngle: konstanter FaktorconeOuterGain.
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
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);
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);
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}°`);
});
// Wichtig · Fallstricke
- Kein AudioParam: Anders als
positionXoderorientationXistconeOuterAngleein einfacher Zahlenwert. Man kann ihn also nicht mitsetValueAtTime()oderlinearRampToValueAtTime()automatisieren. Schnelle Sprünge können hörbar knacken. - Ohne Wirkung bei Standardwerten: Mit
coneOuterAngle = 360oderconeOuterGain = 1hat 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
AudioContextstartet meist erst nach einer Nutzeraktion (Autoplay-Richtlinie). Falls nötig,ctx.resume()in einem Klick-Handler aufrufen.