在directsound中,对于IDirectSoundBuffer,哪个方法负责缓冲区的写入位置。

时间:2013-06-18 02:22:46

标签: c++ winapi audio directsound

在directsound,我们知道,调用IDirectSoundBuffer :: getcurrentposition(),会得到directsound缓冲区中的播放位置和写入位置。但我认为将数据复制到缓冲区应该改变写位置(这种行为,改变了write_position,是由哪种方法引起的,解锁?)。我认为只有复制数据功能才应该只影响缓冲区中的数据,而不是写入位置..

1 个答案:

答案 0 :(得分:0)

  

但我认为将数据复制到缓冲区应该改变写位置

只有一个位置可以为您缓冲轨道,它是“当前位置”,即硬件播放发生的位置,大致因为它随时间不断变化而返回给您。

您的数据操作显然不会影响此位置。相反,您通常希望在当前位置之前继续投放越来越多的数据,以便播放不会达到缓冲区欠载并平滑播放数据。因此,您可以在内部跟踪自己的额外“写入位置”:在此位置添加数据并自行推进此指针。

GetCurrentPosition调用的第二个参数中返回给你的写位置只是为了让你知道哪个位置仍然可以安全写入(在播放和写入位置之间修改数据是迟到的,因为这个数据是已缓冲回放):

  

写入光标指示将新数据写入缓冲区的安全位置。写入光标始终引导播放光标,通常是大约15毫秒的音频数据。