Share via


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.

Innerer Radius und innerer Radiuswinkel

Plattformanforderungen

Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); DirectX SDK (XAudio 2.7)

Anforderungen

Anforderung Wert
Header x3daudio.h

Siehe auch

Strukturen