如何使用SoundPool加載音頻文件?下面南昌APP制作開發(fā)公司-百恒網(wǎng)絡(luò)就來為大家揭曉,不過在介紹如何使用SoundPool加載音頻文件前首先得先創(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加載音頻文件,相比其他音頻播放方法,SoundPool還有個快速響應(yīng)的優(yōu)勢:指令剛一發(fā)出,它就會立即開始播放,一點都不拖沓。
不過反應(yīng)快也是有代價的,那就是在播放前必須預(yù)先加載音頻。SoundPool加載的音頻文件都有自己的Integer類型ID。如下圖所示,在Sound類中添加mSoundId實例變量,并添加相應(yīng)的獲取方法和設(shè)置方法管理這些ID。
南昌APP制作開發(fā)公司要提醒大家的是,mSoundId用了Integer類型而不是int。這樣,在Sound的mSoundId沒有值時可以設(shè)置其為null值。
現(xiàn)在處理音頻加載。在BeatBox中添加一個load(Sound)方法載入音頻,如下圖所示。
調(diào)用mSoundPool.load(AssetFileDescriptor, int)方法可以把文件載入SoundPool待播。為方便管理、重播或卸載音頻文件,mSoundPool.load(...)方法會返回一個int型ID。這實際就是存儲在mSoundId中的ID。調(diào)用openFd(String)方法有可能拋出IOException,load(Sound)方法也是如此。
現(xiàn)在,在BeatBox.loadSounds()方法中,調(diào)用load(Sound)方法載入全部音頻文件,如下圖所示。
運行應(yīng)用確認音頻都已正確加載。否則,會看到LogCat中的紅色異常日志。
以上就是百恒網(wǎng)絡(luò)為大家講的使用SoundPool加載音頻文件方法,了解更多關(guān)于南昌APP開發(fā)技術(shù)資訊,歡迎來電咨詢百恒網(wǎng)絡(luò),或者訪問公司官網(wǎng)查看更多技術(shù)文章。