2016-02-16 34 views

回答

1

只需使用IXAudio2SourceVoice::GetState

XAUDIO2_VOICE_STATE xstate; 
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
    voice->GetState(&xstate, 0); 
#else 
    voice->GetState(&xstate); 
#endif 
if (xstate.BuffersQueued > 0) 
{ 
    // xstate.SamplesPlayed 
} 

原因GetState需要一个标志XAudio 2.8或更高版本是专门所以你可以用XAUDIO2_VOICE_NOSAMPLESPLAYED保存填写当前SamplesPlayed值的开销。

+0

感谢您的提示!我需要做些什么才能让SamplesPlayed工作?它总是返回0,我绝对*不*传递XAUDIO2_VOICE_NOSAMPLESPLAYED标志。 –

+0

嗯.. SamplesPlayed在我做的一个更简单的测试程序中工作正常,所以我必须把我的逻辑弄糟了。无论如何,它看起来像这个答案是正确的。谢谢! –

相关问题