我在iPhone上使用OpenAL来同时播放多个音频样本。

单个样本播放完毕后,我可以让OpenAL通知我吗?

我想避免对样本长度进行硬编码并设置计时器。

最佳答案

如果您将OpenAL源代码抽象为一个类,那么我想您可以在开始声音时简单地调用performSelector:afterDelay::

- (void) play
{
    [delegate performSelector:@selector(soundHasFinishedPlaying)
        afterDelay:self.length];
    …
}

(如果在此期间手动停止声音,则可以取消回调,请参阅NSObject Class Reference。)或者您可以轮询AL_SOURCE_STATE:
- (void) checkStatus
{
    ALint state;
    alGetSourcei(source, AL_SOURCE_STATE, &state);
    if (state == AL_PLAYING)
        return;
    [timer invalidate];
    [delegate soundHasFinishedPlaying];
}

我不知道如何让OpenAL给您回电。您到底想要什么回调?不用回调就可以更好地解决某些问题。

关于iphone - 在OpenAL中播放完声音时得到通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1046315/

10-13 07:36