2016-02-16 7 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 отлично работает в более простой тестовой программе, которую я сделал, поэтому я, должно быть, испортил свою логику. Во всяком случае, похоже, этот ответ правильный. Благодаря! –