Android声音重置

时间:2013-10-12 02:16:21

标签: 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做一些事情,但这种方法看起来会很混乱...... ...

2 个答案:

答案 0 :(得分:1)

这里发布的另一个答案有些正确。你不应该一遍又一遍地呼叫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。您可以通过调用reset侦听器中的setDataSourceprepareonCompletion来完成此操作。此外,请确保在不再需要声音时拨打release

答案 1 :(得分:0)

这是因为你在按钮点击事件中启动了coin_sound,试试这个

在你的oncreate方法中启动这个变量

coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);

然后将其设为您按钮的代码

if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();

问题是你每次点击按钮时都在重新创建一个新的媒体播放器,所以新媒体播放器不会认为有声音

您是否需要使用coin_sound.start();重新开始?不重启停止然后为你启动声音?