C++ XAudio2播放延迟
我正试图用xaudio播放原始pcm数据,但播放时有很大延迟(>=5ms)。我正在使用下一个代码执行此操作:C++ XAudio2播放延迟,c++,xaudio2,C++,Xaudio2,我正试图用xaudio播放原始pcm数据,但播放时有很大延迟(>=5ms)。我正在使用下一个代码执行此操作: bool Play(uint8_t *data, size_t size) { _xaudio_buffer.AudioBytes = size; _xaudio_buffer.pAudioData = data; Time t1; if (_g_source->SubmitSourceBuffer(&_xaudio_buffer) != S_OK)
bool Play(uint8_t *data, size_t size)
{
_xaudio_buffer.AudioBytes = size;
_xaudio_buffer.pAudioData = data;
Time t1;
if (_g_source->SubmitSourceBuffer(&_xaudio_buffer) != S_OK)
return false;
if(WaitForSingleObjectEx(_voice_callback.hBufferEndEvent,INFINITE,true) != WAIT_OBJECT_0)
return false;
Time t2;
printf("%d\n",t2-t1);
}
Time类只是GetTickCount下的一个包装器,结果t2-t1将以毫秒为单位返回差异。我已经检查了我的时间课程没有产生任何额外的延迟。以毫秒为单位计算播放时间并不难: 播放时间=大小*1000/(通道*(每采样8位)*频率) 因此,对于大小为4608字节、48 khz、2个通道、每个样本16位的数据,播放此类数据块需要将近24毫秒。相反,我上面展示的代码需要>=31毫秒才能播放这样的块。是什么造成了这样的延误?如果我正在编写一个视频播放器,并且从实时流中获取数据(我已经有了同步功能,但是对于这样小的样本,5毫秒的延迟会产生不理想的声音),该如何处理 另外,我在两台装有Windows7的电脑上用不同的硬件测试了这段代码。两者产生相同的延迟