在 ObjectAL 中播放缓冲区

Playing buffer in ObjectAL

我是 ObjectAL 的新手。我用它来播放变调的mp3。

我不知道如何"properly" 在 ObjectAL 中播放加载的缓冲区。当我调用 [source play:buffer] 时,声音只有几分之一秒。为了不断 "play" 一个缓冲区,我可以将它嵌入无限循环中,然后正确播放缓冲区。我想我错过了一些基本点,你能指出正确的方向吗?

我的代码:

[OALSimpleAudio sharedInstance].reservedSources = 0;

ALSource *source = [ALSource source];

ALBuffer *buffer = [[OpenALManager sharedInstance] bufferFromFile:@"video.mp3" reduceToMono:YES];
source.pitch = 1;

for (;;) {   // infinite loop because otherwise only a millisecond of buffer is played
    [source play:buffer];
}

调用pitchTo或类似函数实际上使缓冲区不断播放,fx:

[source pitchTo:1 duration:1 target:nil selector:nil];

这并不能算是一个完美的解释,但至少它解决了问题。