How to: Schwenken eines Sounds
In diesem Thema erfahren Sie, wie Sie die Ausgabematrix einer Mono-Quellstimme festlegen können, die an eine Stereomasterstimme ausgegeben wird, um ein Schwenken zwischen dem linken und rechten Lautsprecher zu erreichen.
So richten Sie schwenken ein
Rufen Sie die Sprecherkonfiguration mit IXAudio2MasteringVoice::GetChannelMask ab.
DWORD dwChannelMask; pMasteringVoice->GetChannelMask( &dwChannelMask );Erstellen Sie ein Array, das die Ausgabematrix enthält. Die Mindestgröße der Ausgabematrix ist die Anzahl der Kanäle in der Quellstimme mit der Anzahl der Kanäle in der Ausgabestimme. In diesem Fall verarbeitet ein Array mit acht Elemente eine Mono-Stimme, die in ein beliebiges Ausgabeformat bis zu 7,1 Umschließen ausgegeben wird.
float outputMatrix[ 8 ]; for (int i=0; i<8; i++) outputMatrix[i] = 0;Berechnen Sie die Sendeebenen basierend auf dem gewünschten Schwenken zwischen dem linken und rechten Lautsprecher. In diesem Beispiel reichen die Schwenkwerte von -1 bis 1, und -1 gibt den ganzen Sound bis zum linken Lautsprecher an, und 1 gibt den sound-Bereich bis zum rechten Lautsprecher an.
// 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;Legen Sie die Ausgabematrixindizes für den linken und rechten Lautsprecher mit den im vorherigen Schritt berechneten Werten fest. Der linke und der rechte Sprecher werden bestimmt, indem die von IXAudio2MasteringVoice::GetChannelMaskzurückgegebene Kanalmaske betrachtet wird. Da die Kanäle immer in der auf der WAVEFORMATEXTENSIBLE-Referenzseite angegebenen Reihenfolge codiert werden müssen, ist es möglich, den Arrayindex zu bestimmen, der einem einzelnen Sprecher entspricht.
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; }Wenden Sie die Ausgabematrix mit IXAudio2Voice::SetOutputMatrixauf die ursprüngliche Stimme an. Die ursprüngliche Stimme ist entweder eine Quell- oder eine Untermischungsstimme, die entweder an eine Untermischungs- oder eine Masterstimme sendet. Mit IXAudio2Voice::GetVoiceDetailskönnen Sie Informationen zu den Ausgangs- und Zielstimmen wie deren Anzahl von Kanälen erhalten.
// 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 );