我正在研究Microsoft XAudio2的X3Daudio示例代碼,並且已經將源語音並行地發送到子混音語音和掌握語音。Microsoft XAudio2Sound3D示例代碼'不會發送子混音語音以掌握語音
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));
源語音會將聲音發送到掌握語音和子混音語音。混音語音將廣告混響效果放在聲音上。但是我沒有看到子混音語音將後處理和混響效果啓用聲音發送到主控語音以輸出到揚聲器。
如果在創建時沒有指定發送列表,則子混音將默認將其聲音數據發送到母帶語音。爲什麼在這個示例中,我們還需要發送源語音來同時掌握語音?演示輸出的聲音總是伴隨着混響效果。我沒有看到有一個選項可以禁用示例可執行文件中的混響效果。
我很困惑。