как узнать, когда soundpool закончил воспроизведение аудиофайла?
Я использую soundpool для воспроизведения записанного файла. Я просто хочу знать, есть ли способ узнать, когда soundpool закончит играть. вот мой рабочий код ниже.
public void soundPool() {
final float playbackSpeed = 1.5f;
final SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,
100);
final int soundId = soundPool.load(audiofile.getAbsolutePath(), 1);
AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
final float volume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
soundPool.play(soundId, volume, volume, 1, 0, playbackSpeed);
}
});
}
3 ответов:
Да, вы должны использовать mediaplayer для этого..но с помощью mediaplayer вы не можете сделать быструю переадресацию. я предлагаю вам использовать sound pool для воспроизведения звука, и перед воспроизведением вы можете проверить длительность звука с помощью mediaplayer, а когда время закончится, вы можете вручную остановить soundpool. просто я сделал это в проекте.
К сожалению, нет слушателя, который мог бы сказать, когда SoundPool закончит воспроизведение образца. Если вам нужна эта функциональность, используйте медиаплеер.
В качестве Хака вы можете получить длину вашего аудиофайла из аудиоредактора в миллисекундах (X), а затем установить таймер в вашем приложении после того, как вы скажете ему играть. Таймер включается один раз через X миллисекунд. Таким образом, у вас есть приблизительное представление о том, мог ли ваш звук закончиться. Однако это очень ненадежно. подход и следует избегать, если это может помочь. Вместо этого используйте класс MediaPlayer с MediaPlayer.OnCompletionListener ().
Есть только один способ взять длительность этого аудиофайла и проверить его с помощью потока.
soundPool.play(soundId, 1, 1, 1, 0, 1f); new Handler().postDelayed(new Runnable() { @Override public void run() { // do your stuff song is finished } },soundDuration);Попробуйте.
Comments