Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
375 views
in Technique[技术] by (71.8m points)

android - Media player playing multiple files at the same time

I am having a problem where once the user clicks on a sound to play from my ListView, then while that sound is playing they click on another sound, the 2 sounds they clicked play at the same time.

I would like to have the sound that was currently playing, finish, then start the new sound that they most recently clicked.

If someone could help me, that would be much appreciated!

CODE:

ListView BoardList = (ListView) findViewById(R.id.BoardList);

    String List[] = {

     "Audio1", "Audio2", "Audio3", "Audio4", "Audio5"
         , "Audio6", "Audio7", "Audio8", "Audio9"
           , "Audio10", "Audio11", "Audio12" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.listcustomize, R.id.textItem, List);

    BoardList.setAdapter(adapter);

    BoardList.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            MediaPlayer mPlayer = null;
            if (position == 0) {



                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio1);
                mPlayer.start();
            }

            if (position == 1) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio2);
                mPlayer.start();

            }
            if (position == 2) {


                mPlayer = MediaPlayer.create(HodgeMain.this, R.raw.Audio3);
                mPlayer.start();

            }
            if (position == 3) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio4);
                mPlayer.start();
            }
            if (position == 4) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio5);
                mPlayer.start();
            }
            if (position == 5) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio6);
                mPlayer.start();
            }
            if (position == 6) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio7);
                mPlayer.start();
            }

            if (position == 7) {


                mPlayer = MediaPlayer
                        .create(HodgeMain.this, R.raw.Audio8);
                mPlayer.start();
            }
            if (position == 8) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio9);
                mPlayer.start();
            }
            if (position == 9) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio10);
                mPlayer.start();
            }
            if (position == 10) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio11);
                mPlayer.start();
            }
            if (position == 11) {

                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio12);
                mPlayer.start();

            }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Media player playing multiple files at the same time

Try

Declare MediaPlayer mPlayer; common for all

Like

BoardList.setAdapter(adapter);
MediaPlayer mPlayer;

then use mPlayer.release();

if (position == 0) {

    if(mPlayer!=null)
    {
        mPlayer.release();
        mPlayer=null;
    }

    mPlayer = MediaPlayer.create(HodgeMain.this,
            R.raw.Audio1);
    mPlayer.start();

}
.
.
.
.
if(position==N)
{
        if(mPlayer!=null)
        {
            mPlayer.release();
            mPlayer=null;
        }
        mPlayer = MediaPlayer.create(HodgeMain.this,
                R.raw.AudioN);
        mPlayer.start();
}

About release():

Releases resources associated with this MediaPlayer object.

It is considered good practice to call this method when you're done using the MediaPlayer.

In particular, whenever an Activity of an application is paused (its onPause() method is called), or stopped (its onStop() method is called), this method should be invoked to release the MediaPlayer object, unless the application has a special need to keep the object around.

PS. i have tried with release() which is working fine !

Example: which is working for me

try {

if (position == 1) {
    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
    mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all);
    mPlayer.start();
}
if (position == 2) {
    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
    mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all2);
    mPlayer.start();
}
}

catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...