我在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/