2013-10-12 203 views
1

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

coin_sound.start(); 

你可以很容易地按比硬币更快的声音。当发生这种情况时,我希望硬币声音从开始时就按下按钮开始。

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

问题是,加载媒体文件很小,因为它可能是一个相对较慢的过程。当你开始真正快速点击按钮时,应用程序落后了。

有没有解决我的问题的方法?我唯一的想法是做一些与coin_sounds数组,但这种方法看起来这将是混乱和毛...

回答

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可以被调用。您可以通过在onCompletion侦听器中调用resetsetDataSourceprepare来完成此操作。此外,确保在不再需要声音时拨打release

0

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

在onCreate方法初始化这个变量

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

然后使此代码为您的按钮

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

问题是您recreatin g每次点击一个新媒体播放器时,新媒体播放器不会认为有声音

并且您是否需要再次使用coin_sound.start();开始播放?不重启停止然后开始为你的声音?

+0

据我所知,RESET不会重新启动它删除它的声音。 – java