XAudio2播放延迟

时间:2012-05-07 15:00:12

标签: c++ xaudio2

我正在尝试使用xaudio播放raw-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);
}

时间类只是GetTickCount下的一个包装器,生成的t2-t1将返回以毫秒为单位的差异。我已经检查过我的Time类没有产生任何额外的延迟 以毫秒计算播放时间并不困难:     play_time = size * 1000 /(channels *(bits_per_sample / 8)* frequency)

因此,对于大小为4608字节,48千赫兹,2个通道,每个样本16位的数据,播放此类块需要将近24毫秒。相反,我上面展示的代码需要大约= 31毫秒来播放这样的块。什么导致这种延迟?如何处理它,如果我正在编写一个视频播放器并且我从实时流中获取数据(我已经具有同步功能,但这样的小样本的5ms延迟会产生不理想的声音)?

另外,我已经在2台使用不同硬件的Windows 7计算机上测试过此代码。两者产生相同的延迟。

0 个答案:

没有答案