Partager via


Mappage de canal par défaut XAudio2

Un client XAudio2 a le contrôle total du mappage entre les canaux d’une voix et les canaux de chacune de ses voix de destination. Il contrôle le mappage via l’utilisation de la méthode IXAudio2Voice::SetOutputMatrix . Toutefois, dans certains cas, XAudio2 simplifie cette tâche en configurant automatiquement une matrice d’envoi par défaut. Pour ce faire, il utilise le masque de canal, le cas échéant, associé aux canaux audio d’une voix. Un masque de canal est une combinaison de masques de bits SPEAKER_xxx tels que définis dans X3DAudio.h et ailleurs. XAudio2 exige que les masques de canal soient 0 ou aient le même nombre de bits défini que le nombre de canaux.

Le tableau suivant présente les exigences et les valeurs par défaut du masque de canal pour les formats pris en charge par XAudio2.

Format Configuration requise pour le masque de canal Masque par défaut Membre de structure correspondant
PCM Le fichier peut contenir un masque de canal Masque de canal est égal à 0 ou absent WAVEFORMATEXTENSIBLE.dwChannelMask ou none (WAVEFORMATEX)
ADPCM Le fichier ne contient pas de masque de canal Le masque de canal par défaut est toujours utilisé None (ADPCMWAVEFORMAT)

 

Pour les voix de sous-mixage et de mastering, et pour les voix sources sans masque de canal ou masque de canal de 0, XAudio2 suppose les positions par défaut de l’orateur selon le tableau suivant.

Canaux Positions implicites des canaux
1 Toujours mappé à FrontLeft et FrontRight à grande échelle dans les deux haut-parleurs (cas spécial pour les sons mono)
2 FrontLeft, FrontRight (configuration stéréo de base)
3 FrontLeft, FrontRight, LowFrequency (configuration 2.1)
4 FrontLeft, FrontRight, BackLeft, BackRight (quadraphonique)
5 FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (configuration 5.0)
6 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (configuration 5.1) (voir les remarques suivantes)
7 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (configuration 6.1)
8 FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight (configuration 7.1)
9 ou plus Aucune position implicite (mappage un-à-un)

 

Si une paire de voix donnée dans le graphique audio n’a aucune position d’orateur associée à sa voix source ou cible (une voix a plus de huit canaux), aucune des deux voix n’est lisible tant que la voix source n’a pas de matrice d’envoi définie explicitement à l’aide de la méthode IXAudio2Voice::SetOutputMatrix . L’appel de la méthode IXAudio2SourceVoice::Start pour l’une ou l’autre voix échoue tant que vous ne le faites pas.

Si la voix source et la voix cible ont un nombre différent de positions d’orateur et que IXAudio2Voice::SetOutputMatrix n’a pas été appelé sur la voix source, XAudio2 envoie chaque canal source à l’orateur cible (ou aux haut-parleurs) le plus proche disponible, proportionnellement à leur proximité par rapport à l’orateur prévu. Il existe deux cas spéciaux où le comportement par défaut est différent.

  1. Si l’audio source est mono et est positionné à SPEAKER_FRONT_CENTER ou n’a pas de position définie, il est toujours envoyé à SPEAKER_FRONT_LEFT et SPEAKER_FRONT_RIGHT s’ils existent dans l’audio de sortie. S’ils n’existent pas, cela revient au cas normal.
  2. Si la source et la destination sont à 6 canaux et sont positionnées sur l’une des configurations standard de l’orateur 5.1 (Gauche+Droite+Centre+Sub+BackL+BackR ou Left+Right+Center+Sub+SideL+SideR), les canaux sont mappés via un à un. En d’autres termes, SideLeft/Right et BackLeft/Right sont traités de manière équivalente. Cela est dû au fait qu’il y a eu une confusion historique autour de ces configurations. Par conséquent, l’intention supposée est toujours de mapper un à un.

Voix

Guide de programmation XAudio2

GetChannelMask