溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中SoundPool放聲音

發(fā)布時間:2020-07-22 19:08:37 來源:網(wǎng)絡 閱讀:445 作者:溫華平 欄目:移動開發(fā)

      它適合播放那些需要反復播放,但時間較短的音效。它支持同時播放多種聲音,這些聲音在系統(tǒng)開始時會加載到列表中,按照這些聲音的id,我們可以調(diào)用這些音效。

1、創(chuàng)建一個SoundPool對象:new SoundPool(int maxStreams, int streamType, int srcQuality);

第一個參數(shù)為soundPool可以支持的聲音數(shù)量,這決定了Android為其開設多大的緩沖區(qū),第二個參數(shù)為聲音類型,最后參數(shù)為聲音品質(zhì),品質(zhì)越高,聲音效果越好,但耗費更多的系統(tǒng)資源。

 

2、從資源或者文件載入音頻流: 

       int  load(Context context, int resId, int priority)  //從APK資源載入 
       int  load(FileDescriptor fd, long offset, long length, int priority)  //從FileDescriptor對象載入 
       int  load(AssetFileDescriptor afd, int priority)  //從Asset對象載入 
       int  load(String path, int priority)  //從完整文件路徑名載入 
     
 priority為優(yōu)先級

 

3、播放聲音play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

第一個參數(shù)為id,id即為放入到soundPool中的順序,比如現(xiàn)在collide.wav是第一個,因此它的id就是1。第二個和第三個參數(shù)為左右聲道的音量控制。第四個參數(shù)為優(yōu)先級,由于只有這一個聲音,因此優(yōu)先級在這里并不重要。第五個參數(shù)為是否循環(huán)播放,0為不循環(huán),-1為循環(huán)。最后一個參數(shù)為播放比率,從0.5到2,一般為1,表示正常播放。

 

 

代碼如下:

  private SoundPool soundPool;

  soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 5);
  final int load = soundPool.load(this, R.raw.wen, 1);
  soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
   public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    soundPool.play(load, 1, 1, 0, 0, 1);
   }
  });

 

注意點:

  1. SoundPool最大只能申請1M的內(nèi)存空間,這就意味著我們只能用一些很短的聲音片段,
        而不是用它來播放歌曲或者做游戲背景音樂。
  
2. SoundPool提供了pause和stop方法,但這些方法建議最好不要輕易使用, 因為有些時候它們可能會使你的程序莫名其妙的終止。
  
3. SoundPool的效率問題。其實SoundPool的效率在這些播放類中算是很好的了,但是有的朋友在G1中測試它還是有100ms左右的延遲,這可能會影響用戶體驗。

 

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI