Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中SoundPool 類使用利弊

Android中SoundPool 類使用利弊

編輯:關於Android編程

在開發android軟件中,經常需要播放多媒體音頻文件,通常會采用MediaPlayer類來執行此類操作。但MediaPlayer類占用的資源比較多,對於游戲等應用而言,會帶來性能上的降低。在Android中,專門提供了SoundPool類來執行此類音頻播放,SoundPool類占用的CPU資源較少、反應較快。

SoundPool使用MediaPlaybackService將音頻流解碼為16位的PCM單聲道或者立體聲流。這有利於減小解碼造成的應用延遲。

SoundPool的常用方法包括:
load() //加載音頻文件
pause() //暫停
play() //播放
resume() //恢復
setLoop() //設置循環模式
setOnLoadCompleteListener() //設置監聽器
setVolume() //設置音量
setRate() //設置播放速率

SoundPool類和其他音頻播放類相比,可以自行設置音頻播放時的品質、音量、播放速率等。並且它可以管理多個音頻流,每個流均擁有自己獨立的ID,對單個音頻流的管理均是通過其ID來進行的。SoundPool類適用的場景包括應用程序中的聲效(按鍵提示音、消息等)、游戲中密集而短暫的聲音(如多個飛船同時爆炸)。

SoundPool類的使用方法如下:

代碼10-5 SoundPool播放音頻的一般過程

int srcQuality=100;
int waitMsec=1000;
float leftVolume=SILENT;
float rightVolume=LOUD;
int priority=1;
int loop=0;
float rate=1f;

SoundPool mSoundPool=new SoundPool(SOUNDPOOL_STREAMS, AudioManager.STREAM_MUSIC, srcQuality);
int sampleId1=mSoundPool.load(mContext, SOUND_A, PRIORITY);
int streamID=mSoundPool.play(sampleID, leftVolume, rightVolume, priority, loop, rate);
……

下面是某個網站提供的一個實例: SoundPool在Activity中的集成

import android.media.AudioManager;
import android.media.SoundPool;
public class android123 extends Activity {
private SoundPool snd;
private int hitOkSfx;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
snd=new SoundPool(10, AudioManager.STREAM_SYSTEM,5);
hitOkSfx=snd.load(context, R.raw.ok, 0);
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
snd.play(hitOkSfx, 1, 1, 0, 0, 1);
}
);
}
}

SoundPool通過setLoop(int streamID, int loop)方法可以設置播放模式,當loop值為“-1”時,播放模式為循環模式;當loop值為“0”時,播放模式為單次模式;當loop值為一個正整數時,loop值意味著可以播放的次數。

SoundPool通過setRate(int streamID, float rate)方法可以設置播放速率,其范圍為0.5~2.0。當rate值為2.0時,意味著當前播放速率是原始速率的2倍,處於快進模式。

SoundPool通過setVolume(int streamID,float leftVolume, float rightVolume)方法可以設置音頻流的音量范圍。

另外,通過play()方法,SoundPool可以一次性設置播放模式、播放速率、音量范圍等。

需要注意的是,SoundPool目前存在著一些局限,如最大只能申請1MB的內存空間等,另SoundPool提供了pause()和stop()方法,但這些方法目前存在一些Bug,建議不要輕易使用。SoundPool還存在著一些效率問題。

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