我正在使用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
如何实现这一点请帮助?
答案 0 :(得分:3)
虽然效率似乎不高,但您可以使用所需的声音创建MediaPlayer
,然后使用myMediaPlayer.getDuration()
方法为剪辑提供毫秒数。
然后,您可以调用myMediaPlayer.release()
以消除任何不需要的内存占用。在做更多研究的同时,我发现我不是唯一得出这个结论的人。这个库:
使用这种确切的方法来解决问题。我认为这是一种合法的方式,因为这个人看起来非常合法。
答案 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();
// ...
}