Procedura: Panoramica di un suono
Questo argomento illustra come impostare la matrice di output di una voce di origine mono che restituisce una voce di mastering stereo per ottenere la panoramica tra gli altoparlanti sinistro e destro.
Per configurare la panoramica
Recuperare la configurazione dell'altoparlante usando IXAudio2MasteringVoice::GetChannelMask.
DWORD dwChannelMask; pMasteringVoice->GetChannelMask( &dwChannelMask );
Creare una matrice per contenere la matrice di output. La dimensione minima della matrice di output è il numero di canali nella voce di origine volte il numero di canali nella voce di output. In questo caso, una matrice di otto elementi gestirà un output vocale mono in qualsiasi formato di output fino a 7.1 audio surround.
float outputMatrix[ 8 ]; for (int i=0; i<8; i++) outputMatrix[i] = 0;
Calcolare i livelli di invio in base alla panoramica desiderata tra gli altoparlanti sinistro e destro. In questo esempio, i valori di panoramica vanno da -1 a 1 con -1 che indica tutto il suono all'altoparlante sinistro e 1 che indica tutto il suono all'altoparlante destro.
// pan of -1.0 indicates all left speaker, // 1.0 is all right speaker, 0.0 is split between left and right float left = 0.5f - pan / 2; float right = 0.5f + pan / 2;
Impostare gli indici della matrice di output corrispondenti agli altoparlanti sinistro e destro con i valori calcolati nel passaggio precedente. Gli altoparlanti a sinistra e a destra sono determinati esaminando la maschera del canale restituita da IXAudio2MasteringVoice::GetChannelMask. Poiché i canali devono sempre essere codificati nell'ordine specificato nella pagina di riferimento WAVEFORMATEXTENSIBLE , è possibile determinare l'indice della matrice corrispondente a un singolo altoparlante.
switch (dwChannelMask) { case SPEAKER_MONO: outputMatrix[0] = 1.0; break; case SPEAKER_STEREO: case SPEAKER_2POINT1: case SPEAKER_SURROUND: outputMatrix[0] = left; outputMatrix[1] = right; break; case SPEAKER_QUAD: outputMatrix[0] = outputMatrix[2] = left; outputMatrix[1] = outputMatrix[3] = right; break; case SPEAKER_4POINT1: outputMatrix[ 0 ] = outputMatrix[ 3 ] = left; outputMatrix[ 1 ] = outputMatrix[ 4 ] = right; break; case SPEAKER_5POINT1: case SPEAKER_7POINT1: case SPEAKER_5POINT1_SURROUND: outputMatrix[ 0 ] = outputMatrix[ 4 ] = left; outputMatrix[ 1 ] = outputMatrix[ 5 ] = right; break; case SPEAKER_7POINT1_SURROUND: outputMatrix[ 0 ] = outputMatrix[ 4 ] = outputMatrix[ 6 ] = left; outputMatrix[ 1 ] = outputMatrix[ 5 ] = outputMatrix[ 7 ] = right; break; }
Applicare la matrice di output alla voce di origine usando IXAudio2Voice::SetOutputMatrix. La voce di origine sarà una voce di origine o una voce submix che invia a una voce submix o a una voce mastering. È possibile ottenere informazioni sulle voci di origine e di destinazione, ad esempio il numero di canali, usando IXAudio2Voice::GetVoiceDetails.
// Assuming pVoice sends to pMasteringVoice XAUDIO2_VOICE_DETAILS VoiceDetails; pVoice->GetVoiceDetails(&VoiceDetails); XAUDIO2_VOICE_DETAILS MasterVoiceDetails; pMasteringVoice->GetVoiceDetails(&MasterVoiceDetails); pVoice->SetOutputMatrix( NULL, VoiceDetails.InputChannels, MasterVoiceDetails.InputChannels, outputMatrix );
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per