Java 安卓声音重置

Java 安卓声音重置,java,android,audio,android-mediaplayer,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_sound.start();
您可以轻松地按快于硬币的声音。当这种情况发生时,我希望每次按下按钮时硬币的声音都能从头开始

if(coin_sound.isPlaying()){
    coin_sound.reset();
    coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
}
coin_sound.start();
问题是加载一个可能很小的媒体文件仍然是一个相对缓慢的过程。当你开始快速点击按钮时,应用程序就会严重滞后


我的问题有什么解决办法吗?我唯一的想法是用一系列硬币声音做一些事情,但这种方法看起来会很混乱和粗糙…

这是因为你在按钮点击事件中启动硬币声音,试试这个

在oncreate方法中启动此变量

coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
然后将此代码作为按钮的代码

if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();
问题是,每次单击按钮时,您都在重新创建新媒体播放器,因此新媒体播放器不会认为有声音


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

这是因为您在按钮单击事件中启动硬币声音,请尝试此操作

在oncreate方法中启动此变量

coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
然后将此代码作为按钮的代码

if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();
问题是,每次单击按钮时,您都在重新创建新媒体播放器,因此新媒体播放器不会认为有声音


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

这里发布的另一个答案有些正确。您不应该反复调用
create

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

coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用
create
和前面的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是做应该做的事情的最快方式

您只需调用
coin\u sound.seekTo(0)当您希望重新启动当前播放声音时。所以你可以这样做:

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

这假设您已将
MediaPlayer
保持在准备状态,因此可以调用
start
。您可以通过在
onCompletion
侦听器中调用
reset
setDataSource
prepare
来实现这一点。另外,当不再需要声音时,请务必呼叫
release

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

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

coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用
create
和前面的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是做应该做的事情的最快方式

您只需调用
coin\u sound.seekTo(0)当您希望重新启动当前播放声音时。所以你可以这样做:

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

这假设您已将
MediaPlayer
保持在准备状态,因此可以调用
start
。您可以通过在
onCompletion
侦听器中调用
reset
setDataSource
prepare
来实现这一点。另外,请确保在不再需要声音时调用
release

根据我的知识重置不会重新启动声音,它会删除声音。根据我的知识重置不会重新启动声音,它会删除声音。