2012-03-05 14 views
4

私はオーディオファイルを再生するためにサウンドプールを使用しています。私の目的はオーディオファイルを再生し、終了後に別のオーディオファイルを再生することです。ここでサウンドプールの継続時間を取得する方法

は私のコードは

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

は、それが非効率的なようですが、あなたは所望の音でMediaPlayerを作成し、あなたのクリップでミリ秒を与えることmyMediaPlayer.getDuration()メソッドを使用することができ

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

+0

私は同様の問題を抱えています。私はSoundPoolをあきらめる必要があるかもしれないと思う:( – SpaceBeers

3

...このコードの男を使用するようにしてください。

myMediaPlayer.release()を呼び出して、望ましくないメモリフットプリントを取り除くことができます。より多くの研究をしているうちに、私はこの結論に至る唯一の人ではないことに気付きました。このライブラリ:

Get Duration Of Sound

は、問題を解決するには、この正確な方法を使用しています。私はそれが正当な方法だと思う、この男はかなり合法だと思うので。

関連する問題