首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何跳到一个特定的偏移不止一次?

如何跳到一个特定的偏移不止一次?
EN

Stack Overflow用户
提问于 2018-06-13 01:09:32
回答 2查看 0关注 0票数 0

想象一下这个函数:

代码语言:javascript
复制
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调用它一样。

为什么?

EN

回答 2

Stack Overflow用户

发布于 2018-06-13 09:25:52

可以先播放音频文件,然后调用setOffset像这样

代码语言:txt
复制
- (BOOL)setOffset:(float)offset
{
  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);
  return ((_error = alGetError()) != AL_NO_ERROR);
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-13 11:02:17

尽管api声称设置偏移量在任何状态下都适用于源,但问题是我应该调用alSourceRewind而不是alSourceStop

设置偏移只适用于AL_INITIAL状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档