我正在研究 Microsoft XAudio2 的 X3Daudio 示例代码,并且对将源语音与子混音和母带语音并行发送感到困惑。
if( FAILED( hr = g_audioState.pXAudio2->CreateMasteringVoice( &g_audioState.pMasteringVoice ) ) )
{
SAFE_RELEASE( g_audioState.pXAudio2 );
return hr;
}
if( FAILED( hr = g_audioState.pXAudio2->CreateSubmixVoice( &g_audioState.pSubmixVoice, 1,
nSampleRate, 0, 0,
nullptr, &effectChain ) ) )
{
SAFE_RELEASE( g_audioState.pXAudio2 );
SAFE_RELEASE( g_audioState.pReverbEffect );
return hr;
}
//最后第二个参数nullptr->没有指向子混合语音的sendlist指针,我的理解是,这个子混合语音没有输出。
XAUDIO2_SEND_DESCRIPTOR sendDescriptors[2];
sendDescriptors[0].Flags = XAUDIO2_SEND_USEFILTER; // LPF direct-path
sendDescriptors[0].pOutputVoice = g_audioState.pMasteringVoice;
sendDescriptors[1].Flags = XAUDIO2_SEND_USEFILTER; // LPF reverb-path -- omit for better performance at the cost of less realistic occlusion
sendDescriptors[1].pOutputVoice = g_audioState.pSubmixVoice;
const XAUDIO2_VOICE_SENDS sendList = { 2, sendDescriptors };
// create the source voice
V_RETURN( g_audioState.pXAudio2->CreateSourceVoice( &g_audioState.pSourceVoice, pwfx, 0,
2.0f, nullptr, &sendList ) );
源声音会将声音发送到主声音和子混合声音。子混音会在声音上添加混响效果。但是我看不到子混音声音在哪里发送后处理和混响效果,使声音能够通过母带声音输出到扬声器。
如果您在创建时未指定发送列表,则子混音默认将其声音数据发送到主语音。为什么在这个示例中,我们还需要同时将源语音发送到母带语音?演示输出声音始终带有混响效果。我没有看到示例可执行文件中有禁用混响效果的选项。
我感到很困惑。