2013-09-02 1 views
2

Я использую 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); 
     } 
    }); 

} 

ответ

0

Да, вы должны использовать медиаплеер для этого .. но используя медиаплеер, вы не можете быстро переадресовать. мое предложение заключается в том, что вы используете звуковой пул для воспроизведения звука и перед игрой, вы можете проверить продолжительность звука с помощью медиаплеера, и когда время закончится, вы можете вручную остановить звук. Просто я сделал это в проекте.

1

К сожалению, слушатель не прослушивает прослушиватель, если SoundPool закончил воспроизведение образца. Если вам нужна эта функциональность, используйте MediaPlayer.

В качестве взлома вы можете получить длину своего аудиофайла из аудиоредактора в миллисекундах (X), а затем установить таймер в своем приложении после того, как вы скажете ему играть. Таймер запускается один раз после X миллисекунд. Таким образом, у вас есть приблизительное представление о том, может ли ваш звук закончить игру. Однако это очень ненадежный подход, и его следует избегать, если ему это поможет. Вместо этого используйте класс MediaPlayer с MediaPlayer.OnCompletionListener().

0

есть только один способ, которым вы занимаете продолжительность этого аудиофайла и проверяете его с помощью потока.

soundPool.play(soundId, 1, 1, 1, 0, 1f); 
new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // do your stuff song is finished 

     } 
},soundDuration); 

Попробуйте.