在开发设计Android软件中大家很有可能常常需播放视频多媒体系统音频文件,一般应用MediaPlayer类但此类占有資源较多,针对手机游戏等运用很有可能并不是很适 合,这儿Android123叙述下SoundPool类。SoundPool类在SDK的android.media.SoundPool,说白了是 响声池的含意。关键播放视频一些较短的响声精彩片段,能够从程序流程的資源或系统文件载入,相对性于MediaPlayer类能够*应用较少的CPU資源和较短的反映 延迟时间。
SoundPool和别的响声播放视频类对比,其特性是能够自主设定响声的质量、声音、播放视频比例等参等。而且它能够与此同时管理方法好几个声频流,每一个流都是有独自一人 的ID,对某一声频流的管理方法全是根据ID开展的。SoundPool基本上操作方法为:
建立一个SoundPool目标:new SoundPool(int maxStreams, int streamType, int srcQuality);
从資源或是文档加载声频流: load(Context context, int resId, int priority);
播放视频响声play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
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);
//这儿特定响声池的较大 声频流数量为10,
//响声质量为5大伙儿能够自 己检测体会下实际效果
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){
// play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
//播放视频声频,能够对上下声音各自设定,还能够设定优先,循环系统频次及其速度
//速度最少0.5**为2,1意味着 一切正常速率
snd.play(hitOkSfx, 1, 1, 0, 0, 1);
}
);
}
}
那样大家就可以应用SoundPool简易的播放视频一个声音了。坚信许多盆友早已想试一试了,但是SoundPool并不是至善至美的。现如今已经知道的资 料而言,SoundPool有一些设计方案上的BUG,从固件1.0逐渐有一些也没有修补,我们在应用中应当当心再当心。坚信未来Google会修补这种问 题,但大家**是或是整理出来:
1. SoundPool较大 只有申请办理1M的存储空间,这就代表着大家只有用一些很短的响声精彩片段,而不是用它来播放视频歌 曲或是玩游戏音乐背景。
2. SoundPool给予了pause和stop方式 ,但这种方式 提议**是不必随便应用,由于有一些情况下他们很有可能会使你 的程序流程无缘无故的停止。Android开发设计网提议应用这两个方式 的情况下尽量多做检测工作中,还有一些盆友体现他们不容易马上中断播放视频响声,只是把缓冲区域里的数 据播放视频完才会慢下来,或许会多播放视频一秒钟。
3. SoundPool的高效率难题。实际上SoundPool的高效率在这种播放视频类中算得上非常好的了,可是 有的盆友在G1中检测它或是有100ms上下的延迟时间,这很有可能会危害客户体验。或许这不可以管SoundPool自身,由于到特性比较好的Droid中这一 延迟时间就可以令人接纳了。
在目前SoundPool有这种缺点,但也拥有它不可替代的优势,根据这种大家提议大在以下状况中有应用 SoundPool:1.应用软件中的音效(功能键语音提示,信息等)2.游戏里面聚集而短暂性的响声(如好几个宇宙飞船与此同时发生爆炸),自然大伙儿还能够想起大量的应用方 法。