java - Android MediaPlayer sometimes skips or fails when playing two sounds simultaneously -


i've made method play sounds in mp3 format (max file size 145kb). when event happens in game send file method. creates new mediaplayer instance whenever called, releases instance on completion. problem both emulator , phone, when play 2 sounds near simultaneously, sounds either skip (like scratched cd), or 1 sound doesn't play @ all, or works.

is thread getting overloaded or something? have samsung galaxy s3. should use soundpool instead? i've heard has own problems

public class mediasimultaneous {  private mediaplayer[] mediaplayerarray = new mediaplayer[10]; private audiomanager maudiomanager; int playernum = -1; // array index of player instance.  public void playsound(context context, int audioid) {     if (maudiomanager == null) {         maudiomanager = (audiomanager) context.getsystemservice(context.audio_service);     }         playernum += 1;         mediaplayerarray[playernum] = mediaplayer.create(context, audioid);          mediaplayerarray[playernum].setonpreparedlistener(new mediaplayer.onpreparedlistener() {              @override             public void onprepared(mediaplayer mp) {                 mp.start();                 mp.setoncompletionlistener(new mediaplayer.oncompletionlistener() {                      @override                     public void oncompletion(mediaplayer mp) {                          mp.release();                         mediaplayerarray[playernum] = null;                         playernum -= 1;                          if (playernum <= 0) {                             playernum = 0;                          }                     }                 });             }         });  } 

i figured out 2 separate problems. stuttering due documented bug in mediaplayer, , not playing @ due onprepared no being called. code fixed problem. i'm not sure how. possibly because media being prepared before onpreparedlistener had been created.

        mediaplayerarray[playernum] = new mediaplayer();         uri mediafile;         mediafile = uri.parse("android.resource://com.adventureapps.borntorun/" + audioid);         try {             mediaplayerarray[playernum].setdatasource(context, mediafile);         } catch (ioexception e) {             e.printstacktrace();         }             mediaplayerarray[playernum].setaudiostreamtype(audiomanager.stream_music);         mediaplayerarray[playernum].setonpreparedlistener(new mediaplayer.onpreparedlistener() {             @override             public void onprepared(mediaplayer mp1) {                 mp1.start();                 log.d(tag, "mediaplayer " + integer.tostring(playernum) + " started");             }         });         try {             mediaplayerarray[playernum].prepare();         } catch (ioexception e) {             e.printstacktrace();         } 

Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -