在 directsound 中,我们知道,调用 IDirectSoundBuffer::getcurrentposition(),会在 directsound 缓冲区中获取播放位置和写入位置。但我认为将数据复制到缓冲区应该改变 writeposition(这种行为,改变 write_position,会导致用什么方法,解锁?)。我认为只有复制数据功能应该只影响缓冲区中的数据,而不是写入位置..
问问题
1135 次
1 回答
0
但我认为将数据复制到缓冲区应该改变写位置
只有一个位置可以为您缓冲音轨,它是“当前位置”,即发生硬件播放的位置,因为它会随着时间不断变化,所以大致返回给您。
你的数据操作显然不会影响这个位置。相反,您通常希望在当前位置之前继续抛出越来越多的数据,以便播放不会遇到缓冲区欠载并顺利播放数据。所以你在内部跟踪你自己的额外“写入位置”:你在这个位置添加数据,你自己推进这个指针。
在调用的第二个参数中返回给您的写入位置GetCurrentPosition
仅供参考,让您知道哪个位置仍然可以安全写入(在播放和写入位置之间修改数据已经很晚了,因为该数据已经被缓冲以供播放):
写光标指示可以安全地将新数据写入缓冲区的位置。写入光标始终领先于播放光标,通常领先大约 15 毫秒的音频数据。
于 2013-06-18T05:48:40.143 回答