想象一下这个功能:
void SoundManager::playSource(ALuint sourceID, float offset) { alSourceStop(sourceID); ALint iTotal = 0; ALint iCurrent = 0; ALint uiBuffer = 0; alGetSourcei(sourceID, AL_BUFFER, &uiBuffer); alGetBufferi(uiBuffer, AL_SIZE, &iTotal); iCurrent = iTotal * offset; alSourcei(sourceID, AL_BYTE_OFFSET, iCurrent); alSourcePlay(sourceID); }
想法是调用playSource(x, 0.5f)
将跳转到(大致)缓冲区的中途等.
它在我第一次调用时工作正常,但是如果我在同一个源上再次调用它(无论该源是否正在播放),它就会开始播放,好像我用偏移0调用它一样.
有什么想法吗?
解决了!
尽管API声称设置偏移量适用于任何状态的源,但问题是我本应该在调用alSourceRewind
而不是alSourceStop
在开始时调用.
似乎设置偏移仅适用于该AL_INITIAL
州的来源.