2011-05-31 63 views
0

对于我的小游戏,我想为各种场景播放效果音效。
大多数情况下,它将与用户交互相关。(iphone)有很多AVAudioPlayer实例很好吗?

我可能需要一次播放多个声音。

我打算为每个声音分配AVAudioPlayer。
我不知道有一个约10-20 AVAudioPlayers viewController是好的。
(声音数据本身相当小,在aac中小于100k)

我只是觉得在类中声明10-20 AVAudioPlayer实例似乎很奇怪。
有没有更好的做法或者我只是过度思考呢?

回答

0

是的,这是罚款,有很多AVAudioPlayer实例。我不知道有多少限制,但肯定超过了一打。

下面是一些陷阱:

AVAudioPlayer不做级混合,所以如果你的声音是大批量的,他们可能会彼此并造成波形失真建设性的干扰。我设置了0.8的最大音量来尝试解决这个问题,但它不可靠。

如果您尝试同时启动它们,则使用play方法可能最终导致它们不同步。相反,应尽快弄清楚用户不会注意到的时间,但要足够远,以便让代码有时间退出并准备好时间。然后使用[player playAtTime:soon]

下面是一些现在适用于我的代码。因人而异:

-(void)play 
{ 
    BOOL success; 

    AVAudioPlayer *player = self.player; 

    player.numberOfLoops = -1; 
    player.currentTime = 0; 
    player.volume = _volume; 

    // NSLog(@"deviceCurrentTime=%f", player.deviceCurrentTime); 

    static double soon = 0; 
    if (soon < player.deviceCurrentTime) { 
     soon = player.deviceCurrentTime + 0.5; // why so flakey??? 
    } 
    success = [player playAtTime:soon]; // too flakey for now 

    if (!success) { 
     NSLog(@"player %@ FAILED", player); 
    } else { 
     NSLog(@"player %@ %@ playing at: %f", player, [[player.url relativePath] lastPathComponent], soon); 
    } 
} 

(我不知道如果我的“soon”变种是线程安全的,直到它为你工作,你应该调整污... 0.1太快了,我在某些时候或其他所以我把它撞到了0.5。)