Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [android] SoundPool詳解

[android] SoundPool詳解

編輯:關於Android編程

今天做一個小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)停止播放

......

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved