Mapeamento de canal padrão XAudio2
Um cliente XAudio2 tem controle total do mapeamento dos canais de uma voz para os canais de cada uma de suas vozes de destino. Ele controla o mapeamento por meio do uso do método IXAudio2Voice::SetOutputMatrix . Em algumas circunstâncias, no entanto, o XAudio2 simplifica essa tarefa configurando uma matriz de envio padrão automaticamente. Ele faz isso usando a máscara de canal, se houver, associada aos canais de áudio de uma voz. Uma máscara de canal é uma combinação de máscaras de SPEAKER_xxx bits, conforme definido em X3DAudio.h e em outros lugares. O XAudio2 exige que as máscaras de canal sejam 0 ou tenham o mesmo número de bits definido como o número de canais.
A tabela a seguir mostra os requisitos de máscara de canal e os padrões para os formatos com suporte do XAudio2.
Formatar | Requisito de máscara de canal | Máscara Padrão | Membro da estrutura correspondente |
---|---|---|---|
PCM | O arquivo pode conter uma máscara de canal | A máscara de canal é 0 ou está ausente | WAVEFORMATEXTENSIBLE.dwChannelMask ou none (WAVEFORMATEX) |
ADPCM | O arquivo não contém uma máscara de canal | A Máscara de Canal Padrão é sempre usada | None (ADPCMWAVEFORMAT) |
Para vozes de submixagem e masterização e para vozes de origem sem uma máscara de canal ou uma máscara de canal de 0, XAudio2 assume posições de alto-falante padrão de acordo com a tabela a seguir.
Canais | Posições implícitas do canal |
---|---|
1 | Sempre mapeia para FrontLeft e FrontRight em grande escala em ambos os alto-falantes (caso especial para sons mono) |
2 | FrontLeft, FrontRight (configuração estéreo básica) |
3 | FrontLeft, FrontRight, LowFrequency (configuração 2.1) |
4 | FrontLeft, FrontRight, BackLeft, BackRight (quadraphonic) |
5 | FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (configuração 5.0) |
6 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (configuração 5.1) (consulte os comentários a seguir) |
7 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (configuração 6.1) |
8 | FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight (configuração 7.1) |
9 ou mais | Nenhuma posição implícita (mapeamento um para um) |
Se um determinado par de voz no grafo de áudio não tiver posições de alto-falante associadas à sua voz de origem ou de destino (uma voz tem mais de oito canais), nenhuma voz será reproduzida até que a voz de origem tenha uma matriz de envio definida explicitamente usando o método IXAudio2Voice::SetOutputMatrix . Chamar o método IXAudio2SourceVoice::Start para qualquer voz falhará até que você faça isso.
Se a voz de origem e a voz de destino tiverem números diferentes de posições de alto-falante e IXAudio2Voice::SetOutputMatrix não tiver sido chamado na voz de origem, o XAudio2 enviará cada canal de origem para o alto-falante de destino mais próximo (ou alto-falantes) disponível, proporcionalmente ao quão próximos eles estão do alto-falante pretendido. Há dois casos especiais em que o comportamento padrão é diferente.
- Se o áudio de origem for mono e estiver posicionado em SPEAKER_FRONT_CENTER ou não tiver uma posição definida, ele sempre será enviado para SPEAKER_FRONT_LEFT e SPEAKER_FRONT_RIGHT se eles existirem no áudio de saída. Se eles não existirem, ele voltará ao caso normal.
- Se a origem e o destino forem de seis canais e estiverem posicionados em qualquer uma das configurações padrão do alto-falante 5.1 (Left+Right+Center+Sub+BackL+BackR ou Left+Right+Center+Sub+SideL+SideR), os canais serão mapeados por um para um. Em outras palavras, SideLeft/Right e BackLeft/Right são tratados de forma equivalente. Isso ocorre porque houve confusão histórica em torno dessas configurações. Portanto, a intenção assumida é sempre mapear um para um.
Tópicos relacionados