2012-03-05 177 views
4

我使用soundpool播放音頻文件,我的目標是播放音頻文件,播放完後播放另一個音頻文件。如何獲取Soundpool的持續時間

這裏是我的代碼

String source_path = "/sdcard/varun/audio.mp3"; 



mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
public void onLoadComplete(SoundPool soundPool, int sampleId, 
           int status) { 
          loaded = true; 
         } 
        }); 
        sound1 = mSoundPool.load(source_path, 1); 

        hand1.postDelayed(new Runnable() { 

         public void run() { 
          // TODO Auto-generated method stub 
          if (loaded) { 
           mSoundPool.play(sound1, 1, 1, 1, time - 1, 1); 
           System.out.println("playing=== a"); 
          } 
         } 
        }, 21000); 

我在這裏硬編碼值21000,但我需要得到的音頻文件的持續時間,因爲每個file.I持續時間的變化我在Android 2.2

工作如何獲得這個請幫忙?

回答

2

嘗試使用此代碼花花公子..

String[] fileNames = ... 
MediaPlayer mp = new MediaPlayer(); 
for (String fileName : fileNames) { 
    AssetFileDescriptor d = context.getAssets().openFd(fileName); 
    mp.reset(); 
    mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength()); 
    mp.prepare(); 
    int duration = mp.getDuration(); 
    // ... 
} 
+1

嘿我不想使用mediaplyer我想使用soundpool – Goofy 2012-03-05 04:59:39

+0

我有類似的問題。我認爲我們可能需要放棄SoundPool :( – SpaceBeers 2015-10-28 08:26:14

3

雖然看起來效率不高,你可以創建一個你想要的聲音MediaPlayer,然後使用myMediaPlayer.getDuration()方法給你在剪輯毫秒。

然後,您可以致電myMediaPlayer.release()以擺脫任何不需要的內存佔用。在做更多的研究時,我發現我不是唯一得出這個結論的人。這個庫:

Get Duration Of Sound

用來解決此問題的具體方法。我認爲這是一個合法的做法,因爲這個人看起來很合法。