java - 安卓声音重置

标签 java android audio android-mediaplayer

每次按下按钮时,我的应用程序都会播放硬币声音。

coin_sound.start();

您可以轻松按下比硬币声音更快的声音。发生这种情况时,我希望每次按下按钮时硬币声音都从头开始。

if(coin_sound.isPlaying()){
    coin_sound.reset();
    coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
}
coin_sound.start();

这样做的问题是加载一个很小的媒体文件仍然是一个相对缓慢的过程。当您开始非常快地点击按钮时,应用程序会严重滞后。

我的问题有什么解决方案吗?我唯一的想法是用一组 coin_sounds 做一些事情,但这种方法看起来会很困惑和恶心......

最佳答案

此处发布的另一个答案有些正确。您不应该一遍又一遍地调用 create

不过,该答案中的代码有问题。 reset 方法将 MediaPlayer 发送到空闲状态,在这种状态下调用大多数其他方法是非法的。如果您要走那条路线,则必须按以下顺序调用方法:

coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();

调用 create 与之前的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是完成应做之事的最快方法。

当您想要重新播放当前播放的声音时,您只需调用 coin_sound.seekTo(0);。所以做这样的事情:

if (coin_sound.isPlaying()) coin_sound.seekTo(0);
else coin_sound.start();

假设您已将 MediaPlayer 置于准备状态,以便可以调用 start。您可以通过在 onCompletion 监听器中调用 resetsetDataSourceprepare 来完成此操作。此外,确保在不再需要声音时调用 release

关于java - 安卓声音重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329753/

相关文章:

java - 如何使用 JSP c :forEach and c:if? 过滤最后的条目

android - 如何访问另一个 Android 应用程序的通知 channel ?

java - 如何在Eclipse ADT中打开Android源代码

android - 按下 ListView 项目时播放声音

audio - 如何修复 Ubuntu 18.04 上没有声音?

java - 如何在 Java 中获取 mp3 文件的总时间?

java - 安装 SVN 后 Eclipse 在加载工作台时卡住

java - 如何在单元测试中构造 javax.jms.TextMessage ?

java - size(int x, int y) 正在运行,但在构建处理库路径后在 intellij 中不起作用

Android 应用程序安装失败,错误为 : [INSTALL_FAILED_DEXOPT]