打鼓应用程序 - Laggy Sounds ...如何修复?

时间:2010-09-13 01:34:11

标签: iphone ios audio

我有一个基于AVAudioPlayer创建的鼓应用,而不是常见的系统声音,以便进行一些控制。

问题在于,无论何时一次播放两个或多个声音,它都会滞后并停止所有声音,因此您的鼓声会随波动并随机停止。

例如:动臂热潮chhhhh动臂热潮ch ---热潮bo ---- chhhhh

如果你能从那个拟声词中得知。

这是声音代码,我有一个预加载的AVAudioPlayer数组,以便加载更快。

- (void)triggerSound:(NSInteger)soundNumber {
    NSInteger deltaNum = soundNumber*numberOfBuffers;
    AVAudioPlayer *lowBuffer = [bufferBox objectAtIndex:deltaNum];
    Boolean soundFired = FALSE;
    // Find an unused buffer if possible, otherwise play sound from first buffer.
    for (int i=0; i<numberOfBuffers; i++) {
        NSLog(@"Buffer loop: %d", i);
        NSLog(@"Buffer to load: %d", deltaNum);
        AVAudioPlayer *tempBuffer = [bufferBox objectAtIndex:deltaNum+i];
        if (!tempBuffer.playing) {
            tempBuffer.currentTime = 0;
            [tempBuffer play];
            soundFired = TRUE;
            break;
        } else if (lowBuffer.currentTime>tempBuffer.currentTime) {
            lowBuffer = tempBuffer;
        }
    }
    if (!soundFired) {
        lowBuffer.currentTime = 0;
        [lowBuffer play];
        soundFired = TRUE;
    }
}

在IBAction按钮按下调用该方法。例如:[drumObject triggerSound:3]。

所有帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

对于某些游戏,我使用OpenAL API获得了更好的体验。它是非常不同和更低级别(你必须处理源和缓冲区)但它对我来说比AVAudioPlayer好得多。

答案 1 :(得分:1)

您可以尝试使用iOS游戏引擎来满足您的音频需求。

例如:http://gamua.com/sparrow/

您实际上不必使用此引擎的图形部分。只需导入并使用框架的音频部分(在OpenAL之上提供简单的API)。