X3DAUDIO_EMITTER-Struktur (x3daudio.h)
Definiert eine Einzelpunkt- oder Mehrpunkt-3D-Audioquelle, die mit einer beliebigen Anzahl von Soundkanälen verwendet wird.
Syntax
typedef struct X3DAUDIO_EMITTER {
X3DAUDIO_CONE *pCone;
X3DAUDIO_VECTOR OrientFront;
X3DAUDIO_VECTOR OrientTop;
X3DAUDIO_VECTOR Position;
X3DAUDIO_VECTOR Velocity;
FLOAT32 InnerRadius;
FLOAT32 InnerRadiusAngle;
UINT32 ChannelCount;
FLOAT32 ChannelRadius;
FLOAT32 *pChannelAzimuths;
X3DAUDIO_DISTANCE_CURVE *pVolumeCurve;
X3DAUDIO_DISTANCE_CURVE *pLFECurve;
X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;
X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;
X3DAUDIO_DISTANCE_CURVE *pReverbCurve;
FLOAT32 CurveDistanceScaler;
FLOAT32 DopplerScaler;
} X3DAUDIO_EMITTER, *LPX3DAUDIO_EMITTER;
Member
pCone
Zeiger auf einen Soundkegel. Wird nur mit Einkanal-Emittern für Matrix-, LPF- (sowohl direkte als auch Hallpfade) und Hallberechnungen verwendet. NULL gibt an, dass der Emitter omnidirektional ist.
OrientFront
Ausrichtung der Vorderrichtung. Dieser Wert muss mit OrientTop orthonormal sein. Bei Verwendung von OrientFront muss normalisiert werden. Für Einkanal-Emitter ohne Kegel wird OrientFront nur für Emitterwinkelberechnungen verwendet. Für Mehrkanal-Emitter oder einkanalige Kegel mit Kegeln wird OrientFront für Matrix-, LPF- (sowohl direkte als auch Hallpfade) und Hallberechnungen verwendet.
OrientTop
Ausrichtung der obersten Richtung. Dieser Wert muss mit OrientFront orthonormal sein. OrientTop wird nur mit mehrkanaligen Emittern für Matrixberechnungen verwendet.
Position
Position in benutzerdefinierten Welteinheiten. Dieser Wert wirkt sich nicht auf Velocity aus.
Velocity
Geschwindigkeitsvektor in benutzerdefinierten Welteinheiten/Sekunde. Dieser Wert wird nur für Dopplerberechnungen verwendet. Dies wirkt sich nicht auf die Position aus.
InnerRadius
Wert, der für die Berechnung des inneren Radius verwendet werden soll. Wenn InnerRadius 0 ist, wird kein innerer Radius verwendet, aber InnerRadiusAngle kann weiterhin verwendet werden. Dieser Wert muss zwischen 0,0f und MAX_FLT sein.
InnerRadiusAngle
Wert, der für die Winkelberechnungen des inneren Radius verwendet werden soll. Dieser Wert muss zwischen 0,0f und X3DAUDIO_PI/4,0 sein.
ChannelCount
Anzahl der von der X3DAUDIO_EMITTER-Struktur definierten Emitter. Muss größer als 0 sein.
ChannelRadius
Abstand von Position , an der Kanäle platziert werden, wenn ChannelCount größer als 1 ist. ChannelRadius wird nur mit mehrkanaligen Emittern für Matrixberechnungen verwendet. Muss größer oder gleich 0,0f sein.
pChannelAzimuths
Tabelle der Kanalpositionen, ausgedrückt als Azimut im Bogenmaß entlang des Kanalradius in Bezug auf den vorderen Ausrichtungsvektor in der Orthogonalebene zum oberen Ausrichtungsvektor. Ein Azimut von X3DAUDIO_2PI gibt an, dass ein Kanal ein LFE-Kanal (Low-Frequency Effects) ist. LFE-Kanäle werden an der Emitterbasis positioniert und nur in Bezug auf pLFECurve berechnet, niemals pVolumeCurve. pChannelAzimuths muss mindestens ChannelCount-Elemente aufweisen, kann aber NULL sein, wenn ChannelCount = 1 ist. Die Tabellenwerte müssen innerhalb von 0,0f sein, um X3DAUDIO_2PI. pChannelAzimuths wird mit mehrkanaligen Emittern für Matrixberechnungen verwendet.
pVolumeCurve
Entfernungskurve auf Volumenebene, die nur für Matrixberechnungen verwendet wird. NULL gibt eine spezielle Standardkurve an, die dem umgekehrten Quadratgesetz entspricht, sodass bei Einem Abstand zwischen 0,0f und CurveDistanceScaler × 1,0f keine Dämpfung angewendet wird. Wenn der Abstand größer als CurveDistanceScaler × 1,0f ist, ist der Verstärkungsfaktor (CurveDistanceScaler × 1,0f)/Distance. Bei einer Entfernung von CurveDistanceScaler × 2,0f liegt der Sound bei halber Lautstärke oder -6 dB, in einem Abstand von CurveDistanceScaler × 4,0f, der Sound bei einer Viertellautstärke oder -12 dB usw.
pVolumeCurve und pLFECurve sind voneinander unabhängig. pVolumeCurve wirkt sich nicht auf das LFE-Kanalvolume aus.
pLFECurve
LFE-Abrolldistanzkurve oder NULL zur Verwendung der Standardkurve: [0.0f, CurveDistanceScaler ×1.0f], [CurveDistanceScaler ×1.0f, 0.0f]. Ein NULL-Wert für pLFECurve gibt eine Standardkurve an, die dem umgekehrten Quadratgesetz entspricht, wobei distances <= CurveDistanceScaler auf keine Dämpfung geklemmt ist. pVolumeCurve und pLFECurve sind voneinander unabhängig. pLFECurve wirkt sich nicht auf das Nicht-LFE-Kanalvolume aus.
pLPFDirectCurve
Entfernungskurve für den Direkten Pfad-Koeffizienten (Low-Pass Filter, LPF) oder NULL zur Verwendung der Standardkurve: [0,0f, 1,0f], [1,0f, 0,75f]. pLPFDirectCurve wird nur für LPF-Direktpfadberechnungen verwendet.
pLPFReverbCurve
LPF-Hallpfadkoeffizienten-Entfernungskurve oder NULL zur Verwendung der Standardkurve: [0,0f, 0,75f], [1,0f, 0,75f]. pLPFReverbCurve wird nur für LPF-Hallpfadberechnungen verwendet.
pReverbCurve
Reverb send level distance curve, or NULL to use default curve: [0.0f, 1.0f], [1.0f, 0.0f].
CurveDistanceScaler
Kurvenabstandsskalierung, die verwendet wird, um normalisierte Entfernungskurven auf benutzerdefinierte Welteinheiten zu skalieren und/oder um deren Wirkung zu übertreiben. Dies wirkt sich nicht auf andere Berechnungen aus. Der Wert muss innerhalb des Bereichs liegen, der FLT_MIN FLT_MAX. CurveDistanceScaler wird nur für Matrix-, LPF- (sowohl direkte als auch Hallpfade) und Hallberechnungen verwendet.
DopplerScaler
Doppler-Schichtskalierung, der verwendet wird, um den Doppler-Verschiebungseffekt zu übertreiben. DopplerScaler wird nur für Dopplerberechnungen verwendet und wirkt sich nicht auf andere Berechnungen aus. Der Wert muss innerhalb des Bereichs 0,0f liegen, um FLT_MAX.
Hinweise
X3DAUDIO_EMITTER unterstützt nur einen Kegel in einem Einzelpunkt-Emitter. Mehrpunkt-Emitter sind eine bequeme und effiziente Möglichkeit, eine verwandte Gruppe von Soundquellen zu verwalten. Viele Eigenschaften werden von allen Kanalpunkten gemeinsam genutzt, z. B. Doppler– die gleiche Dopplerverschiebung wird auf alle Kanäle im Emitter angewendet. Daher muss der Dopplerwert nur einmal berechnet werden, nicht pro Punkt, wie es bei mehreren separaten Einzelpunkt-Emittern erforderlich wäre. Da X3DAUDIO_EMITTER nur über einen Ausrichtungsvektor verfügt, wäre ein Mehrpunkt-Emitterkegel von begrenztem Nutzen, sodass alle Kanäle gezwungen werden, sich so zu verhalten, als ob sie der gleichen Richtung gegenüberstehen. Wenn mehrere unabhängige Kegel benötigt werden, sollten mehrere Einzelpunkt-Emitter verwendet werden, von denen jeder eine eigene Ausrichtung hat.
Der Parametertyp X3DAUDIO_VECTOR wird in DirectX::XMFLOAT3 eingegeben, um x-, y- und z-Gleitkommawerte bereitzustellen.
X3DAudio verwendet ein linkshändiges kartesisches Koordinatensystem, wobei die Werte auf der x-Achse von links nach rechts, auf der Y-Achse von unten nach oben und auf der Z-Achse von nah nach weit steigen. Azimuths werden aus einer bestimmten Bezugsrichtung im Uhrzeigersinn gemessen.
Um X3DAudio mit rechtshändigen Koordinaten zu verwenden, müssen Sie das .z-Element von OrientFront, OrientTop, Position und Velocity negieren.
Für benutzerdefinierte Entfernungskurven muss das Entfernungsfeld des ersten Punkts 0,0f und das Abstandsfeld des letzten Punkts 1,0f sein.
Wenn ein Emitter einen Abstand von (CurveDistanceScaler × 1,0f) überschreitet, wird der letzte Punkt der Kurve verwendet, um den Ausgabepegel des Volumes zu berechnen. Der letzte Punkt wird durch Folgendes bestimmt:
X3DAUDIO_DISTANCE_CURVE.pPoints[PointCount-1].DSPSetting)
Innerer Radius und Innerer Radiuswinkel
InnerRadius wird verwendet, um einen Bereich mit glattem Übergang um den Ursprungspunkt anzugeben, während ein Sound direkt über oder unter dem Listener verläuft. Die Höhe wird durch Die Angabe eines InnerRadiusAngle berücksichtigt, wobei ein Sound, dessen Höhe zunimmt oder abnimmt, schließlich beginnt, den Sound in mehr als nur zwei Lautsprecher zu entleeren.Wenn innerer Radius und Innerer Radiuswinkel nicht verwendet werden, sind Emitter in den beiden Lautsprechern hörbar, die ihrer aktuellen Position/Ausrichtung am nächsten liegen (oder, wenn sie direkt auf einer Linie mit dem definierten Winkel eines Sprechers stehen, ausschließlich von diesem einen Lautsprecher).
Innenradius und Innerer Radiuswinkel haben keine Auswirkungen auf Strahler, die außerhalb der beschriebenen Kegel positioniert sind. Im Inneren des Kegels führen sie dazu, dass der Ton allmählich in die gegenüberliegenden Lautsprecher einblößt, bis der Sound in allen Lautsprechern gleich gehört wird, wenn sich der Emitter an der gleichen Position wie (oder direkt über oder unter) dem Hörer befindet.
Plattformanforderungen
Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); DirectX SDK (XAudio 2.7)Anforderungen
Anforderung | Wert |
---|---|
Header | x3daudio.h |