97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見教育科技集團(tuán) >> 新聞動(dòng)態(tài) >> Android資料 >> Android中SoundPool 類使用利弊  
 
Android中SoundPool 類使用利弊
分享到:

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

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

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

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

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);
……

下面是某個(gè)網(wǎng)站提供的一個(gè)實(shí)例: 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)方法可以設(shè)置播放模式,當(dāng)loop值為“-1”時(shí),播放模式為循環(huán)模式;當(dāng)loop值為“0”時(shí),播放模式為單次模式;當(dāng)loop值為一個(gè)正整數(shù)時(shí),loop值意味著可以播放的次數(shù)。

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

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

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

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

 
 更多相關(guān)文章

·Android AudioTrack音頻播放分析
·Android音頻記錄的處理
·Android AudioManager音量控制流程
·Android音頻處理的基本接口
·Android編譯過程詳解(三)