編輯:關於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還存在著一些效率問題。
說實話,對於xUtils,是我最近才用到的開發框架(也是剛接觸),對於其功能不得不說,簡化了很多的開發步驟,可以說是非常好的開發工具,但是其最近更新到3.0也
1、 題外話 相信大家對LayoutInflate都不陌生,特別在ListView的Adapter的getView方法中基本都會出現,使用
寫在前面現在,越來越多的App裡面使用了模糊效果,這種模糊效果稱之為高斯模糊。大家都知道,在Android平台上進行模糊渲染是一個相當耗CPU也相當耗時的操作,一旦處理不
先明確幾個概念的區別: padding margin都是邊距的含義,關鍵問題得明白是什麼相對什麼的邊距. padding是控件的內容相對控件的邊緣的邊距. margin是