在以前的博文中,我們已經(jīng)講解了AVAudioPlayer和SystemSoundService的用法。這兩種功能在一定程度上都適合作為游戲音效的播放方式。而兩者也各有其優(yōu)缺點。下面我們來總結(jié)一下有哪些:
iPhone OS 主要提供以下了幾種播放音頻的方法:
System Sound Services
AVAudioPlayer 類
Audio Queue Services
OpenAL
關(guān)于System Sound Services
System Sound Services 是最底層也是最簡單的聲音播放服務(wù),調(diào)用 AudioServicesPlaySystemSound 這個方法就可以播放一些簡單的音頻文件,使用此方法只適合播放一些很小的提示或者警告音,因為它有很多限制:
■ 聲音長度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的進(jìn)度
■ 調(diào)用方法后立即播放聲音
■ 沒有循環(huán)播放和立體聲控制
1)AVAudioPlayer的優(yōu)點
(1)可以播放任意長度音樂;
(2)可以循環(huán)播放;
(3)可以控制播放的時間;
(4)可以控制聲道的音量實現(xiàn)立體聲效果;
(5)可以調(diào)整音量。
2)AVAudioPlayer的缺點
(1)播放之前必須先加載,不能立即播放;
(2)一次一個AudioPlayer只能播放所加載的音樂,不能同時播放好幾次同樣的音樂。
(3)沒有振動效果
3)SystemSoundService的優(yōu)點:
(1)能夠立即播放
(2)能夠在同一時間播放多次音樂
(3)可以加上振動效果
4)SystemSoundService的缺點:
(1)不能循環(huán)播放
(2)不能控制播放時間
(3)不能控制聲道
(4)不能控制音量
(5)不能暫停音樂
我們發(fā)現(xiàn),這兩種音樂播放方式的優(yōu)缺點幾乎是完全互補的。那么,有什么用呢?
關(guān)鍵:我們這里考慮的是游戲音效的播放!都是短時間的音頻播放!
想象一下游戲,有時候我們要重復(fù)的播放一個音效,有時候我們想來一個振動,有時候我們需要在短時間內(nèi)播放同一個音頻多次!
因此,我們可以考慮綜合兩者的功能!
辦法:
利用AVAudioPlayer來實現(xiàn)SystemSoundService的效果!彌補AVAudioPlayer的缺點
我們先明確一下我們需要的功能:
(1)初始化后即可立即播放
(2)能在一個時間段內(nèi)播放同一音頻多次。這個再做個詳細(xì)說明:我們使用AVAudioPlayer時,play后必須等其停止了才能重新播放。我們這里要改進(jìn)的是即使前面的播放還沒有結(jié)束,我們也可以啟動新的播放,這個特別適用于播放敲擊的聲音,這樣我們會感覺聽到多個敲擊的聲音,而不是只有一個。記住這里不是講和其他的AVAudioPlayer混音。
(3)能循環(huán)播放
(4)能暫停停止播放
(5)能播放震動和播放音頻并震動
(6)能調(diào)節(jié)聲道
(7)能調(diào)節(jié)音量