GetCurrentPosition的IDirectSoundBuffer方法有两个参数:
HRESULT GetCurrentPosition( LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor );
第一个参数“pdwCurrentPlayCursor”接收播放光标,第二个参数“pdwCurrentWriteCursor”接收写入光标,该光标指示声音缓冲区中的位置,之后可以安全地写入数据 - 从播放光标开始的区域并且在写入光标处结束(可能包裹在缓冲区的末尾)可能包含已提交给声音硬件但尚未播放的数据。
FMOD提供的最接近的等效方法似乎是FMOD ::频道的getPosition方法:
FMOD_RESULT F_API getPosition( unsigned int *position, FMOD_TIMEUNIT postype );
此方法有一个参数“position”用于接收播放光标,但没有用于接收写入光标的参数。
FMOD是否提供任何带有参数的函数,该参数与IDirectSoundBuffer :: GetCurrentPosition的pdwCurrentWriteCursor参数具有相同的用途?或者是在播放光标时添加固定偏移量(DirectSound文档建议播放光标和写入光标之间的间隔大约是15毫秒)是使用FMOD时获取安全写入光标的唯一方法吗?
答案 0 :(得分:0)
DirectSound使用“环形缓冲区”提交模型,该模型相当老派。 XAudio2,FMOD和其他现代声音API使用“基于数据包”提交。在此模型中,您提交要播放的音频缓冲区,这些缓冲区保留在队列中,然后在完成播放之前作为每个缓冲区进行处理。
在基于数据包的提交中,“播放光标”具有意义,但“写入光标”不具有意义。