Play sound on button click android

后端 未结 11 1255
清酒与你
清酒与你 2020-11-29 16:10

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         


        
11条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-29 16:51

    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;
            }
        }
    
    }
    

提交回复
热议问题