Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ XAudio2播放延迟_C++_Xaudio2 - Fatal编程技术网

C++ XAudio2播放延迟

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)

我正试图用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)
    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的电脑上用不同的硬件测试了这段代码。两者产生相同的延迟