? ? ? ?在Android開發中,由于企業發展需要,有時候會要求南昌APP開發公司在進行安卓開發時開發音頻播放功能,這就需要安卓程序師在開發中寫好加載音頻文件的程序,這樣才能實現音頻正常播放,那么如何加載音頻文件呢?需要用到哪些方法?接下來百恒網絡就來為大家做個簡單介紹,供大家參考、學習!
? ? ? ?相比其他音頻播放方法,SoundPool還有個快速響應的優勢:指令剛一發出,它就會立即開始播放,一點都不拖沓。不過反應快也是有代價的,那就是在播放前必須預先加載音頻。SoundPool加載的音頻文件都有自己的Integer類型ID。
如下代碼清單所示,在Sound類中添加mSoundId實例變量,并添加相應的獲取方法和設置方法管理這些ID。
? ? ? ?代碼清單:添加mSoundId實例變量(Sound.java)
? ? ? ?public class Sound {
? ? ? ?private String mAssetPath;
? ? ? ?private String mName;
? ? ? ?private Integer mSoundId;
? ? ? ?...
? ? ? ?public String getName() {
? ? ? ?return mName;
? ? ? ?}
? ? ? ?public Integer getSoundId() {
? ? ? ?return mSoundId;
? ? ? ?}
? ? ? ?public void setSoundId(Integer soundId) {
? ? ? ?mSoundId = soundId;
? ? ? ?}
? ? ? ?}
? ? ? ?注意,mSoundId用了Integer類型而不是int。這樣,在Sound的mSoundId沒有值時可以設置其為null值。
? ? ? ?現在處理音頻加載。在BeatBox中添加一個load(Sound)方法載入音頻,如下代碼清單所示。
? ? ? ?代碼清單:加載音頻(BeatBox.java)
? ? ? ?private void loadSounds() {
? ? ? ?...
? ? ? ?}
? ? ? ?private void load(Sound sound) throws IOException {
? ? ? ?AssetFileDescriptor afd = mAssets.openFd(sound.getAssetPath());
? ? ? ?int soundId = mSoundPool.load(afd, 1);
? ? ? ?sound.setSoundId(soundId);
? ? ? ?}
? ? ? ?}
? ? ? ?調用mSoundPool.load(AssetFileDescriptor, int)方法可以把文件載入SoundPool待播。為方便管理、重播或卸載音頻文件,mSoundPool.load(...)方法會返回一個int型ID。這實際就是存儲在mSoundId中的ID。調用openFd(String)方法有可能拋出IOException,load(Sound)方法也是如此。
? ? ? ?現在,在BeatBox.loadSounds()方法中,調用load(Sound)方法載入全部音頻文件,如下面代碼清單所示。
? ? ? ?代碼清單:載入全部音頻文件(BeatBox.java)
? ? ? ?private void loadSounds() {
? ? ? ?...
? ? ? ?for (String filename : soundNames) {
? ? ? ?try {
? ? ? ?String assetPath = SOUNDS_FOLDER + "/" + filename;
? ? ? ?Sound sound = new Sound(assetPath);
? ? ? ?load(sound);
? ? ? ?mSounds.add(sound);
? ? ? ?} catch (IOException ioe) {
? ? ? ?Log.e(TAG, "Could not load sound " + filename, ioe);
? ? ? ?}
? ? ? ?}
? ? ? ?}
? ? ? ?運行應用確認音頻都已正確加載。否則,會看到LogCat中的紅色異常日志。
? ? ? ?其實加載音頻文件的方法還有很多,百恒網絡今天就為大家介紹這一種,想了解更多APP開發方面的技術知識,歡迎訪問南昌APP開發公司-百恒網絡 http://m.zzzhenghong.cn/,我們專業為您服務!