如何获得Soundpool的持续时间

时间:2012-03-05 04:37:22

标签: android 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,但我需要获取音频文件的持续时间,因为持续时间随每个文件而变化。我正在使用android 2.2

如何实现这一点请帮助?

2 个答案:

答案 0 :(得分:3)

虽然效率似乎不高,但您可以使用所需的声音创建MediaPlayer,然后使用myMediaPlayer.getDuration()方法为剪辑提供毫秒数。

然后,您可以调用myMediaPlayer.release()以消除任何不需要的内存占用。在做更多研究的同时,我发现我不是唯一得出这个结论的人。这个库:

Get Duration Of Sound

使用这种确切的方法来解决问题。我认为这是一种合法的方式,因为这个人看起来非常合法。

答案 1 :(得分:2)

尝试使用此代码dude ..

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();
    // ...
}