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);
        }
    });

}
4

3 回答 3

2

只有一种方法可以获取该音频文件的持续时间并使用线程进行检查。

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

      }
},soundDuration);

试试看。

于 2018-01-25T13:28:09.033 回答
1

不幸的是,没有提供监听器来告诉 SoundPool 何时完成播放样本。如果您需要此功能,请使用 MediaPlayer。

作为 hack,您可以从音频编辑器获取音频文件的长度(以毫秒 (X) 为单位),然后在您告诉它播放后在您的应用程序中设置一个计时器。计时器设置为在 X 毫秒后触发一次。这样您就可以大致了解您的声音是否已经播放完毕。但是,这是一种非常不可靠的方法,如果可以提供帮助,应避免使用。而是将 MediaPlayer 类与 MediaPlayer.OnCompletionListener() 一起使用。

于 2013-11-24T17:30:39.387 回答
0

是的,您必须为此使用媒体播放器..但是使用媒体播放器您无法进行快进。我的建议是您使用声音池播放声音,在播放之前,您可以使用媒体播放器检查声音的持续时间,当时间结束时您可以手动停止声音池。很简单,我在一个项目中做到了这一点。

于 2014-04-24T20:27:57.167 回答