【问题标题】:Android SoundPool end event listener?Android SoundPool 结束事件监听器?
【发布时间】:2015-10-28 08:30:53
【问题描述】:

我最近开始玩弄 Android。一旦声音结束并返回之前的活动,我正试图开始一些事情。

spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        int soundID = spool.load(this, card.getSound(), 1);
        spool.play(soundID, 500, 500, 1, 0, 1f);

我看不到任何有关获取声音持续时间或任何类型的声音结束事件的信息。我知道 SoundPool 会很痛苦,所以我愿意放弃它。

声音结束后我该怎么做?我可以使用 SoundPool 执行此操作吗?还是我找错了树?

谢谢。我对 Android 和 Java 还很陌生,所以对所有建议持开放态度。

【问题讨论】:

  • 过去我自己走这条路,我会选择 Fabian 并切换到 MediaPlayer。 SoundPool 没有这方面的事件,而且如果您的声音样本的长度超过几秒钟,您可能会遇到它们刚刚切断的问题,因为 SoundPool 的声音固定缓冲区大小非常小(据我记得,没有很好的记录。) MediaPlayer 有一个完成侦听器,可以播放任意长度的样本。可以将 SoundPool 视为对游戏中简短的“一劳永逸”音效有用,MediaPlayer 对其他一切有用。

标签: android android-activity android-mediaplayer soundpool


【解决方案1】:

如果不需要SoundPool 的多流处理功能,您可以使用MediaPlayer,它确实有您要询问的回调。

一个粗略的例子:

MediaPlayer mp = MediaPlayer.create(Activity.this, soundId);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // do something
    }
});
mp.start();

只需确保在某处挂起 MediaPlayer 引用,以便它在 OnCompletionListener 触发之前doesn't get GC'd :)

【讨论】:

  • 我去看看。我怀疑 SoundPool 是一个失败的原因,但它完成了工作。
  • 认为 SoundPool 更适合类似游戏的情况,在这种情况下,您经常需要播放多个声音以响应各种事件,而不必关心它们何时结束.
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多