How do I get a button to play a sound from raw when click? I just created a button with id button1
, but whatever code I write, all is wrong.
imp
An edge case: Above every answer is almost correct but I was stuck in an edge case. If any user randomly clicks the button multiple times within a few seconds then after playing some sound it doesn't respond anymore.
Reason: Initialize Mediaplayer
object is very expensive. It also deals with resources (audio file) so it takes some time for it. When users randomly initialize and calling a method of MediaPlayer
's methods like start()
, stop()
, release()
, etc can cause IllegalStateException
which I faced.
Solution: Thanks caw for his suggestion in the comment about Android-Audio. It has just a simple two java classes (MusicManager.java, SoundManager.java).
You can use MusicManager.java
if you want to play one-off sound files -
MusicManager.getInstance().play(MyActivity.this, R.raw.my_sound);
You can use SoundManager.java
if you want to play multiple sounds frequently and fast -
class MyActivity extends Activity {
private SoundManager mSoundManager;
@Override
protected void onResume() {
super.onResume();
int maxSimultaneousStreams = 3;
mSoundManager = new SoundManager(this, maxSimultaneousStreams);
mSoundManager.start();
mSoundManager.load(R.raw.my_sound_1);
mSoundManager.load(R.raw.my_sound_2);
mSoundManager.load(R.raw.my_sound_3);
}
private void playSomeSound() {
if (mSoundManager != null) {
mSoundManager.play(R.raw.my_sound_2);
}
}
@Override
protected void onPause() {
super.onPause();
if (mSoundManager != null) {
mSoundManager.cancel();
mSoundManager = null;
}
}
}