[android] SoundPool詳解

來源:互聯網
上載者:User

[android] SoundPool詳解

今天做一個小Demo用到了SoundPool,總結一下。

MediaPlayer缺點:不能重疊播放音樂,封裝程度比較高,所以載入起來會比較慢。

SoundPool簡介

Android系統提供了另一種播放音效的類。用來載入多個音效,短促音效和多個短促音效,可自行設定聲音品質,音量,重複和優先順序。在一定場合還是很好用的。

屬於android.media包下,繼承自Object。

 

構造方法public SoundPool(int maxStreams, int streamType, int srcQuality) {...} 參數一 maxStreams:支援多少個聲音(也就是池的大小) 參數二 streamType:指定聲音類型通過AudioManager擷取對應的常量值。 參數三 srcQuality:採樣率變換品質,沒用到。預設是0,沒查到資料。。
SoundPool pool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
指定了該池最多指定三個音頻,使用用於系統聲音的音頻流。於AudioManager參數有很多,可以戳---> AudioManager。
載入資料

有四個構造方法:

 

 

public int load(String path, int priority) 從完整檔案路徑名載入
path:檔案路徑
priority:優先順序,0的優先順序最低 傳回值:這個聲音的ID,用於開啟和關閉音樂。 public int load(AssetFileDescriptor afd, int priority)
從Asset對象載入 afd:一個assets檔案中的描述器,可以獲得assets下檔案的資訊; priority: 傳回值: public int load(Context context, int resId, int priority) 從APK資源擷取
context: resId:檔案的ID(res檔案夾裡的檔案才有id) priority: public int load(FileDescriptor fd, long offset, long length, int priority) 從FileDescriptor對象載入

 

 

fd:檔案描述類的執行個體 offset:從音效檔開始的位移量(從什麼地方播放) length:聲音長度 priority:播放構造方法: public final int play(int soundID, float leftVolume, float rightVolume,int priority, int loop, float rate) 參數一 soundID:所播放的聲音ID,是load方法返回的 參數二 leftVolume:左音量,值從(0.0-1.0) 參數三 rightVolume:右音量,值從(0.0-1.0) 參數四 priority:優先順序,0的優先順序最低。 參數五 loop:是否迴圈,0不迴圈,-1一直迴圈。 參數六 rate:播放速率,1為正常速率。範圍從0.5-2。
如果需要播放多首:需要一個集合來儲存音訊ID,就是上面load方法返回的int。 如果指定播放一首:就不用建集合了,假設音頻位於

//擷取資源
AssetFileDescriptor fd = getResources().openRawResourceFd(R.raw.music)
//載入音頻int soundID = pool.load(fd, 1);
//播放音頻,soundID是上面的傳回值pool.play(soundID, 1, 1, 0, 0, 1);


這樣完成了一首音訊播放。 最後一個問題:播放多首音頻。

 

 

聲明一個集合存放音頻 HashMap soundMap = new HashMap();
soundMap.put(1, pool.load(this, R.raw.music1, 1));
soundMap.put(2, pool.load(this, R.raw.music2, 1));
soundMap.put(3, pool.load(this, R.raw.music3, 1));

存放三個音頻; pool.play(soundMap.get(1), 1, 1, 0, 0, 1);
pool.play(soundMap.get(2), 1, 1, 0, 0, 1);
pool.play(soundMap.get(3), 1, 1, 0, 0, 1);

這樣就完成多首音訊播放
釋放資源及其他

 

release()方法釋放所有SoundPool對象佔據的記憶體和資源。

pause(soundID)暫停播放

stop(soundID)停止播放

......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.