kiki
kiki

Reputation: 11

Imagebutton with sound is not working

i made a program in android studio which has 10 imagebutton, each imagebutton when clicked will produce a sound. However, when i run them on emulator only first 7 imagebutton will produce a sound (don't care what order the button i clicked on). Im new to this, help me, This is my code:

public class playtimang extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_playtimang);

    final MediaPlayer satukecik = MediaPlayer.create(this, R.raw.one_kecik);
    final MediaPlayer satubesar = MediaPlayer.create(this, R.raw.one_besar);
    final MediaPlayer duakecik = MediaPlayer.create(this, R.raw.two_kecik);
    final MediaPlayer duabesar = MediaPlayer.create(this, R.raw.two_besar);
    final MediaPlayer tigakecik = MediaPlayer.create(this, R.raw.three_kecik);
    final MediaPlayer tigabesar = MediaPlayer.create(this, R.raw.three_besar);
    final MediaPlayer limakecik = MediaPlayer.create(this, R.raw.five_kecik);
    final MediaPlayer limabesar = MediaPlayer.create(this, R.raw.five_besar);
    final MediaPlayer enamkecik = MediaPlayer.create(this, R.raw.six_kecik);
    final MediaPlayer enambesar = MediaPlayer.create(this, R.raw.six_besar);

    ImageButton satu_kecikIB = (ImageButton) this.findViewById(R.id.satukecikIB);
    ImageButton satu_besarIB = (ImageButton) this.findViewById(R.id.satubesarIB);
    ImageButton dua_kecikIB = (ImageButton) this.findViewById(R.id.duakecikIB);
    ImageButton dua_besarIB = (ImageButton) this.findViewById(R.id.duabesarIB);
    ImageButton tiga_kecikIB = (ImageButton) this.findViewById(R.id.tigakecikIB);
    ImageButton tiga_besarIB = (ImageButton) this.findViewById(R.id.tigabesarIB);
    ImageButton lima_kecikIB = (ImageButton) this.findViewById(R.id.limakecikIB);
    ImageButton lima_besarIB = (ImageButton) this.findViewById(R.id.limabesarIB);
    ImageButton enam_kecikIB = (ImageButton) this.findViewById(R.id.enamkecikIB);
    ImageButton enam_besarIB = (ImageButton) this.findViewById(R.id.enambesarIB);

    satu_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            satukecik.start();
        }
    });

    satu_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            satubesar.start();
        }
    });

    dua_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            duakecik.start();
        }
    });

    dua_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            duabesar.start();
        }
    });

    tiga_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tigakecik.start();
        }
    });

    tiga_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tigabesar.start();
        }
    });

    lima_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            limakecik.start();
        }
    });

    lima_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            limabesar.start();
        }
    });

    enam_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            enamkecik.start();
        }
    });

    enam_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            enambesar.start();
        }
    });


}

}

Upvotes: 0

Views: 478

Answers (1)

Dushyant Suthar
Dushyant Suthar

Reputation: 671

As MediaPlayer is made for some long running or big media files which includes various formats of Videos, audios so making use of it for some small tones is bad because it itself includes big calculations to perform. There is a architecture diagram to follow to make use of MediaPlayer well instead you should use SoundPool because it is designed for such purposes only.

Now the main answer to your problem is

As stated on official documentation

"Create" Added in API level 1

MediaPlayer create (Context context, int resid)

Convenience method to create a MediaPlayer for a given resource id. On success, prepare() will already have been called and must not be called again.When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception. Note that since prepare() is called automatically in this method, you cannot change the audio stream type (see setAudioStreamType(int)), audio session ID (see setAudioSessionId(int)) or audio attributes (see setAudioAttributes(AudioAttributes) of the new MediaPlayer.

In short you must follow the state diagram of MediaPlayer to get safety from such kind of errors or exceptions. You must call release method to release the resources after every call.

Upvotes: 1

Related Questions