Mapping del canale predefinito XAudio2
Un client XAudio2 ha il controllo completo del mapping dai canali di una voce ai canali di ognuna delle voci di destinazione. Controlla il mapping tramite l'uso del metodo IXAudio2Voice::SetOutputMatrix . In alcune circostanze, tuttavia, XAudio2 semplifica questa attività configurando automaticamente una matrice di invio predefinita. Questa operazione viene eseguita usando la maschera del canale, se presente, associata ai canali audio di una voce. Una maschera di canale è una combinazione di maschere di bit SPEAKER_xxx definite in X3DAudio.h e altrove. XAudio2 richiede che le maschere di canale siano 0 o abbiano lo stesso numero di bit impostate come numero di canali.
Nella tabella seguente vengono illustrati i requisiti della maschera di canale e le impostazioni predefinite per i formati supportati da XAudio2.
Formato | Requisito della maschera di canale | Maschera predefinita | Membro della struttura corrispondente |
---|---|---|---|
PCM | Il file potrebbe contenere una maschera di canale | La maschera di canale è 0 o assente | WAVEFORMATEXTENSIBLE.dwChannelMask o nessuno (WAVEFORMATEX) |
ADPCM | Il file non contiene una maschera di canale | Maschera canale predefinita viene sempre usata | Nessuno (ADPCMWAVEFORMAT) |
Per le voci di submix e mastering e per le voci di origine senza una maschera di canale o una maschera di canale pari a 0, XAudio2 presuppone le posizioni predefinite degli altoparlanti in base alla tabella seguente.
Canali | Posizioni di canale implicite |
---|---|
1 | Esegue sempre il mapping a FrontLeft e FrontRight su scala completa in entrambi i altoparlanti (caso speciale per i suoni mono) |
2 | FrontLeft, FrontRight (configurazione stereo di base) |
3 | FrontLeft, FrontRight, LowFrequency (configurazione 2.1) |
4 | FrontLeft, FrontRight, BackLeft, BackRight (quadrafonica) |
5 | FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (configurazione 5.0) |
6 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (configurazione 5.1) (vedere le osservazioni seguenti) |
7 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (configurazione 6.1) |
8 | FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight (configurazione 7.1) |
9 o più | Nessuna posizione implicita (mapping uno-a-uno) |
Se una determinata coppia vocale nel grafico audio non ha posizioni di altoparlante associate alla sua voce di origine o di destinazione (una voce ha più di otto canali), nessuna voce è riproducibile finché la voce di origine non ha una matrice di invio impostata in modo esplicito usando il metodo IXAudio2Voice::SetOutputMatrix . La chiamata al metodo IXAudio2SourceVoice::Start per entrambe le voci avrà esito negativo fino a quando non si esegue questa operazione.
Se la voce di origine e la voce di destinazione hanno diversi numeri di posizioni altoparlanti e IXAudio2Voice::SetOutputMatrix non è stato chiamato sulla voce di origine, XAudio2 invia ogni canale di origine all'altoparlante di destinazione più vicino (o altoparlanti) disponibile, in modo proporzionale alla chiusura dell'altoparlante previsto. Esistono due casi speciali in cui il comportamento predefinito è diverso.
- Se l'audio di origine è mono ed è posizionato in SPEAKER_FRONT_CENTER o non ha una posizione definita, viene sempre inviato a SPEAKER_FRONT_LEFT e SPEAKER_FRONT_RIGHT se esistono nell'audio di output. Se non esistono, torna al normale caso.
- Se l'origine e la destinazione sono entrambi 6 canali e sono posizionati in una delle configurazioni standard di 5.1 altoparlanti (Left+Right+Center+Sub+BackL+BackR o Left+Center+Sub+SideL+SideR), i canali vengono mappati a uno a uno. In altre parole, SideLeft/Right e BackLeft/Right vengono trattati in modo equivalente. Questo perché c'è stata confusione storica intorno a queste configurazioni. Pertanto, l'intento assunto è sempre quello di mapparne uno a uno.
Argomenti correlati