Partager via


structure X3DAUDIO_EMITTER (x3daudio.h)

Définit une source audio 3D monopoint ou à plusieurs points qui est utilisée avec un nombre arbitraire de canaux audio.

Syntaxe

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;

Membres

pCone

Pointeur vers un cône sonore. Utilisé uniquement avec des émetteurs à canal unique pour les calculs de matrice, de LPF (chemins directs et de réverbération) et de réverbération. NULL spécifie que l’émetteur est omnidirectionnel.

OrientFront

Orientation de la direction avant. Cette valeur doit être orthonormale avec OrientTop. OrientFront doit être normalisé lorsqu’il est utilisé. Pour les émetteurs à canal unique sans cônes , OrientFront n’est utilisé que pour les calculs d’angle de l’émetteur. Pour les émetteurs multicanaux ou pour un canal unique avec des cônes , OrientFront est utilisé pour les calculs de matrice, de LPF (chemins directs et de réverbération) et de réverbération.

OrientTop

Orientation de la direction supérieure. Cette valeur doit être orthonormale avec OrientFront. OrientTop est utilisé uniquement avec les émetteurs multicanaux pour les calculs de matrice.

Position

Position dans les unités mondiales définies par l’utilisateur. Cette valeur n’affecte pas la vitesse.

Velocity

Vecteur de vélocité dans les unités mondiales définies par l’utilisateur/seconde. Cette valeur est utilisée uniquement pour les calculs doppler. Cela n’affecte pas Position.

InnerRadius

Valeur à utiliser pour les calculs de rayon interne. Si InnerRadius est 0, aucun rayon interne n’est utilisé, mais InnerRadiusAngle peut toujours être utilisé. Cette valeur doit être comprise entre 0,0f et MAX_FLT.

InnerRadiusAngle

Valeur à utiliser pour les calculs d’angle de rayon interne. Cette valeur doit être comprise entre 0,0f et X3DAUDIO_PI/4.0.

ChannelCount

Nombre d’émetteurs définis par la structure X3DAUDIO_EMITTER . Doit être supérieure à 0.

ChannelRadius

Distance à partir de La position où les canaux seront placés si ChannelCount est supérieur à 1. ChannelRadius est utilisé uniquement avec les émetteurs multicanaux pour les calculs de matrice. Doit être supérieur ou égal à 0,0f.

pChannelAzimuths

Tableau des positions de canal, exprimées sous forme d’azimut en radians le long du rayon du canal par rapport au vecteur d’orientation avant dans le plan orthogonal vers le vecteur d’orientation supérieure. Un azimut de X3DAUDIO_2PI spécifie qu’un canal est un canal à effets basse fréquence (LFE). Les canaux LFE sont positionnés à la base de l’émetteur et sont calculés par rapport à pLFECurve uniquement, jamais pVolumeCurve. pChannelAzimuths doit avoir au moins des éléments ChannelCount , mais peut avoir la valeur NULL si ChannelCount = 1. Les valeurs de table doivent être comprises dans 0,0f pour X3DAUDIO_2PI. pChannelAzimuths est utilisé avec des émetteurs multicanaux pour les calculs de matrice.

pVolumeCurve

Courbe de distance au niveau du volume, qui est utilisée uniquement pour les calculs de matrice. NULL spécifie une courbe par défaut spécialisée qui est conforme à la loi carrée inverse, de sorte que lorsque la distance est comprise entre 0,0f et CurveDistanceScaler × 1.0f, aucune atténuation n’est appliquée. Lorsque la distance est supérieure à CurveDistanceScaler × 1.0f, le facteur d’amplification est (CurveDistanceScaler × 1.0f)/distance. À une distance de CurveDistanceScaler × 2.0f, le son sera à un demi-volume ou -6 dB, à une distance de CurveDistanceScaler × 4.0f, le son sera à un quart de volume ou -12 dB, et ainsi de suite.

pVolumeCurve et pLFECurve sont indépendants les uns des autres. pVolumeCurve n’affecte pas le volume du canal LFE .

pLFECurve

Courbe de distance de substitution LFE ou NULL pour utiliser la courbe par défaut : [0.0f, CurveDistanceScaler ×1.0f], [CurveDistanceScaler ×1.0f, 0.0f]. Une valeur NULL pour pLFECurve spécifie une courbe par défaut conforme à la loi carrée inverse avec distances <= CurveDistanceScaler serrée à aucune atténuation. pVolumeCurve et pLFECurve sont indépendants les uns des autres. pLFECurve n’affecte pas le volume de canal non LFE.

pLPFDirectCurve

Courbe de distance à coefficient direct du filtre passe-bas (LPF) ou NULL pour utiliser la courbe par défaut : [0.0f, 1.0f], [1.0f, 0.75f]. pLPFDirectCurve est utilisé uniquement pour les calculs de chemin direct LPF.

pLPFReverbCurve

Courbe de coefficient de chemin de réverbération LPF ou NULL pour utiliser la courbe par défaut : [0,0f, 0,75f], [1.0f, 0.75f]. pLPFReverbCurve est utilisé uniquement pour les calculs de chemin de réverbération LPF.

pReverbCurve

Courbe de distance de niveau d’envoi de réverbération ou NULL pour utiliser la courbe par défaut : [0.0f, 1.0f], [1.0f, 0.0f].

CurveDistanceScaler

Scaler de distance de courbe utilisé pour mettre à l’échelle des courbes de distance normalisées en unités mondiales définies par l’utilisateur, et/ou pour exagérer leur effet. Cela n’affecte pas les autres calculs. La valeur doit se trouver dans la plage FLT_MIN à FLT_MAX. CurveDistanceScaler est utilisé uniquement pour les calculs de matrice, de LPF (chemins directs et de réverbération) et de réverbération.

DopplerScaler

Scaler de décalage Doppler utilisé pour exagérer l’effet de décalage Doppler. DopplerScaler est utilisé uniquement pour les calculs Doppler et n’affecte aucun autre calcul. La valeur doit se trouver dans la plage 0,0f pour FLT_MAX.

Remarques

X3DAUDIO_EMITTER prend uniquement en charge un cône dans un émetteur à point unique. Les émetteurs multipoints sont un moyen pratique et efficace de gérer un groupe de sources sonores connexes. De nombreuses propriétés sont partagées entre tous les points de canal, comme Doppler. Le même décalage Doppler est appliqué à tous les canaux de l’émetteur. Par conséquent, la valeur Doppler n’a besoin d’être calculée qu’une seule fois, et non par point comme cela serait nécessaire avec plusieurs émetteurs à point unique distincts. Comme X3DAUDIO_EMITTER n’a qu’un seul vecteur d’orientation, un cône émetteur multipoint serait d’une utilité limitée, obligeant tous les canaux à se comporter comme s’ils faisaient face à la même direction. Si plusieurs cônes indépendants sont nécessaires, plusieurs émetteurs à point unique doivent être utilisés, chacun avec sa propre orientation.

Le type de paramètre X3DAUDIO_VECTOR est tapé sur DirectX ::XMFLOAT3, pour fournir des valeurs à virgule flottante x , y et z.

X3DAudio utilise un système de coordonnées cartésien gauche, avec des valeurs sur l’axe des x augmentant de gauche à droite, sur l’axe y de bas en haut et sur l’axe z de près à loin. Les azimuts sont mesurés dans le sens des aiguilles d’une montre à partir d’une direction de référence donnée.

Pour utiliser X3DAudio avec des coordonnées à droite, vous devez nier l’élément .z de OrientFront, OrientTop, Position et Velocity.

Pour les courbes de distance définies par l’utilisateur, le champ de distance du premier point doit être de 0,0f et le champ de distance du dernier point doit être de 1,0f.

Si un émetteur se déplace au-delà d’une distance de (CurveDistanceScaler × 1.0f), le dernier point de la courbe est utilisé pour calculer le niveau de sortie du volume. Le dernier point est déterminé par les éléments suivants :

X3DAUDIO_DISTANCE_CURVE.pPoints[PointCount-1].DSPSetting)

Rayon interne et angle de rayon interne

InnerRadius est utilisé pour spécifier une zone de transition fluide autour du point d’origine pendant qu’un son traverse, au-dessus ou au-dessous de l’écouteur. L’élévation est prise en compte par la spécification d’un InnerRadiusAngle, par lequel un son dont l’élévation augmente ou diminue, commence finalement à saigner le son en plus de deux haut-parleurs.

Lorsque le rayon intérieur et l’angle de rayon interne ne sont pas utilisés, les émetteurs sont audibles dans les deux haut-parleurs les plus proches de leur position/orientation actuelle (ou, si directement sur une ligne avec l’angle défini d’un haut-parleur, uniquement à partir de celui-ci).

Le rayon intérieur et l’angle de rayon interne n’ont aucun effet sur les émetteurs positionnés en dehors des cônes qu’ils décrivent. À l’intérieur du cône, ils provoquent progressivement le saigne du son dans les haut-parleurs opposés, jusqu’à ce que le son soit également entendu dans tous les haut-parleurs lorsque l’émetteur est à la même position que (ou directement au-dessus ou au-dessous) de l’écouteur.

Rayon intérieur et angle de rayon interne

Configuration requise pour la plateforme

Windows 10 (XAudio2.9) ; Windows 8, Windows Phone 8 (XAudio 2.8) ; Kit de développement logiciel (SDK) DirectX (XAudio 2.7)

Configuration requise

Condition requise Valeur
En-tête x3daudio.h

Voir aussi

Structures