SoundPool能加載一批聲音資源到內(nèi)存中狸棍,并支持同時播放多個音頻文件匿乃。
創(chuàng)建 SoundPool
Lollipop引入了新的方式創(chuàng)建 SoundPool :使用 SoundPool.Builder 纹蝴。不過,為了兼容API 16最低級別,只能選擇使用SoundPool(int, int, int)
這個老構(gòu)造方法了。
- 第一個參數(shù)指定同時播放多少個音頻襟铭。這里指定了5個。在播放5個音頻時短曾,如果嘗試再播放第6個寒砖, SoundPool 會停止播放原來的音頻。
- 第二個參數(shù)確定音頻流類型嫉拐。Android有很多不同的音頻流哩都,它們都有各自獨立的音量控制選項。這就是調(diào)低音樂音量婉徘,鬧鐘音量卻不受影響的原因漠嵌。打開文檔,查看 AudioManager 類的AUDIO_* 常量盖呼,還可以看到其他控制選項献雅。 STREAM_MUSIC 使用的是同音樂和游戲一樣的音量控制。
- 最后一個參數(shù)指定采樣率轉(zhuǎn)換品質(zhì)塌计。參考文檔說這個參數(shù)不起作用,所以這里傳入0值侯谁。
加載音頻文件
對于 SoundPool锌仅,加載音頻文件時在播放前必須預(yù)先加載音頻。SoundPool加載的音頻文件都有自己的Integer類型ID墙贱。所以要在Sound類中添加mSoundId實例變量,并添加相應(yīng)的Getter 和 Setter 方法管理這些ID热芹。
播放音頻
調(diào)用SoundPool.play(int, float, float, int, int, float)
方法播放音頻。
參數(shù)依次是:音頻ID惨撇、左音量伊脓、右音量、優(yōu)先級(無效)魁衙、是否循環(huán)以及播放速率报腔。我們需要最大音量和常速播放株搔,所以傳入值1.0。是否循環(huán)參數(shù)傳入0值纯蛾,代表不循環(huán)纤房。如果想無限循環(huán),可以傳入-1翻诉。