2015-09-19 41 views
0

我正在研究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)); 

源語音會將聲音發送到掌握語音和子混音語音。混音語音將廣告混響效果放在聲音上。但是我沒有看到子混音語音將後處理和混響效果啓用聲音發送到主控語音以輸出到揚聲器。

如果在創建時沒有指定發送列表,則子混音將默認將其聲音數據發送到母帶語音。爲什麼在這個示例中,我們還需要發送源語音來同時掌握語音?演示輸出的聲音總是伴隨着混響效果。我沒有看到有一個選項可以禁用示例可執行文件中的混響效果。

我很困惑。

回答

0

如果您不提供發送列表,則語音會自動連接到主控語音。每MSDN

pSendList [in, optional] 
    Pointer to a list of XAUDIO2_VOICE_SENDS structures that describe 
    the set of destination voices for the submix voice. If pSendList is 
    NULL, the send list will default to a single output to the first 
    mastering voice created. 

如果你提供了一個發送列表,但是,那麼聲音的輸出不會去母帶的聲音,除非你在sendlist指定。因此,爲什麼源語音專門發送給主控語音和子混音語音。

混響在子混音上完成的原因是優化。它允許所有受混響影響的源聲音進行處理,包括過濾和源速率轉換成子混音,然後通常很昂貴的效果(在這種情況下爲環境混響)可以運行一次,而不是每個聲源。此外,使子混音變爲單聲道而不是多聲道,因此在效果處理之前,任何立體聲或多聲道音源都被下混到子混音中。第三,這允許你發送一些聲音給主控聲音,而不是從混響中排除混音聲音(通常是HUD和接口聲音)。

請注意,最新版本的XAudio2示例可在GitHub上找到。您可能還想看看DirectX Tool Kit for Audio