Mappatura del canale predefinito di 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 il metodo IXAudio2Voice::SetOutputMatrix. In alcune circostanze, tuttavia, XAudio2 semplifica questa attività configurando automaticamente una matrice di invio predefinita. A tale scopo, usa la maschera di 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 pari a 0 o abbiano lo stesso numero di bit impostati come numero di canali.
La tabella seguente illustra i requisiti della maschera di canale e i valori predefiniti 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 | La 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 a piena scala in entrambi gli altoparlanti (caso speciale per i suoni mono) |
2 | FrontLeft, FrontRight (configurazione stereo di base) |
3 | Anteriore Sinistro, Anteriore Destro, Bassa Frequenza (configurazione 2.1) |
4 | Sinistra Anteriore, Destra Anteriore, Sinistra Posteriore, Destra Posteriore (quadrafonica) |
5 | FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (5.0 configurazione) |
6 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (5.1 configurazione) (vedere le osservazioni seguenti) |
7 | AnterioreSinistra, AnterioreDestra, AnterioreCentro, BassaFrequenza, LateraleSinistra, LateraleDestra, PosterioreCentro (configurazione 6.1) |
8 | Sinistra Anteriore, Destra Anteriore, Centrale Anteriore, Bassa Frequenza, Sinistra Posteriore, Destra Posteriore, Sinistra Laterale, Destra Laterale (configurazione 7.1) |
9 o più | Nessuna posizione implicita (corrispondenza uno-a-uno) |
Se una coppia voce specificata nel grafico audio non ha posizioni voce associate alla voce di origine o di destinazione (una voce ha più di otto canali), nessuna delle due voci è riproducibile finché la voce di origine non ha una matrice di trasmissione impostata in modo esplicito usando il metodo IXAudio2Voice::SetOutputMatrix. La chiamata al metodo IXAudio2SourceVoice::Start per entrambe le voci avrà esito negativo finché non si esegue questa operazione.
Se la voce di origine e la voce di destinazione hanno un numero diverso di posizioni degli altoparlanti e IXAudio2Voice::SetOutputMatrix non è stato chiamato sulla voce di origine, XAudio2 invia ogni canale di origine all'altoparlante (o altoparlanti) destinazione disponibile più vicino, proporzionalmente alla loro vicinanza all'altoparlante previsto. Esistono due casi speciali in cui il comportamento predefinito è diverso.
- Se l'audio di origine è mono e viene 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 caso normale.
- Se l'origine e la destinazione sono entrambe a 6 canali e sono posizionate in una delle configurazioni standard 5.1 degli altoparlanti (Sinistra+Destra+Centro+Subwoofer+BackL+BackR o Sinistra+Destra+Centro+Subwoofer+SideL+SideR), i canali vengono mappati 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 presunto è sempre quello di realizzare una corrispondenza uno a uno.
Argomenti correlati