FMOD是否与DirectSound的IDirectSoundBuffer :: GetCurrentPosition的pdwCurrentWriteCursor参数等效?

时间:2016-10-17 12:55:08

标签: c++ fmod directsound

GetCurrentPositionIDirectSoundBuffer方法有两个参数:

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时获取安全写入光标的唯一方法吗?

1 个答案:

答案 0 :(得分:0)

DirectSound使用“环形缓冲区”提交模型,该模型相当老派。 XAudio2,FMOD和其他现代声音API使用“基于数据包”提交。在此模型中,您提交要播放的音频缓冲区,这些缓冲区保留在队列中,然后在完成播放之前作为每个缓冲区进行处理。

在基于数据包的提交中,“播放光标”具有意义,但“写入光标”不具有意义。