как узнать, когда 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);
}
});

}
447   3  

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

    Ничего не найдено.