SoundPool能加載一批聲音資源到內存中,并支持同時播放多個音頻文件。
創建 SoundPool
Lollipop引入了新的方式創建 SoundPool :使用 SoundPool.Builder 。不過,為了兼容API 16最低級別,只能選擇使用SoundPool(int, int, int)
這個老構造方法了。
- 第一個參數指定同時播放多少個音頻。這里指定了5個。在播放5個音頻時,如果嘗試再播放第6個, SoundPool 會停止播放原來的音頻。
- 第二個參數確定音頻流類型。Android有很多不同的音頻流,它們都有各自獨立的音量控制選項。這就是調低音樂音量,鬧鐘音量卻不受影響的原因。打開文檔,查看 AudioManager 類的AUDIO_* 常量,還可以看到其他控制選項。 STREAM_MUSIC 使用的是同音樂和游戲一樣的音量控制。
- 最后一個參數指定采樣率轉換品質。參考文檔說這個參數不起作用,所以這里傳入0值。
加載音頻文件
對于 SoundPool,加載音頻文件時在播放前必須預先加載音頻。SoundPool加載的音頻文件都有自己的Integer類型ID。所以要在Sound類中添加mSoundId實例變量,并添加相應的Getter 和 Setter 方法管理這些ID。
播放音頻
調用SoundPool.play(int, float, float, int, int, float)
方法播放音頻。
參數依次是:音頻ID、左音量、右音量、優先級(無效)、是否循環以及播放速率。我們需要最大音量和常速播放,所以傳入值1.0。是否循環參數傳入0值,代表不循環。如果想無限循環,可以傳入-1。