2011-05-31 66 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。)