How to play audio files one after the other

前端 未结 3 597
悲&欢浪女
悲&欢浪女 2020-12-10 20:33

I have multiple audio files in the assets directory of my application. When the user clicks a button I want to play those files in a certain order, one after the other. Ther

相关标签:
3条回答
  • 2020-12-10 21:13

    Check this, these classes can play mp3 urls one after another, i created them roughly at some point,and can be tweaked for playing from asset........

    https://github.com/vivdub/AndroidMediaplayer

    0 讨论(0)
  • 2020-12-10 21:21

    create raw folder in res directory and put your sound file there

    Now... Use PlayMedia Like this

    int[] soundIDs = {R.raw.yes, R.raw.eat};
    PlayMedia playAudio = new PlayMedia(context,soundIDs);
    playAudio.execute();
    

    and define PlayMedia Class Like this

    import android.content.Context;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.AsyncTask;
    import android.util.Log;
    
    public class PlayMedia extends AsyncTask<Void, Void, Void> {
    
        private static final String LOG_TAG = PlayMedia.class.getSimpleName();
    
        Context context;
        private MediaPlayer mediaPlayer;
        int[] soundIDs;
        int idx =1;
    
        public PlayMedia(MediaPlayer mediaPlayer) {
            this.mediaPlayer = mediaPlayer;
        }
        public PlayMedia(final Context context, final int[] soundIDs) {
            this.context = context;
            this.soundIDs=soundIDs;
            mediaPlayer = MediaPlayer.create(context,soundIDs[0]);
            setNextMediaForMediaPlayer(mediaPlayer);
        }
    
        public void setNextMediaForMediaPlayer(MediaPlayer player){
            player.setOnCompletionListener(new OnCompletionListener() {         
                public void onCompletion(MediaPlayer mp) {
                    if(soundIDs.length>idx){
                        mp.release();
                        mp = MediaPlayer.create(context,soundIDs[idx]);
                        setNextMediaForMediaPlayer(mp);
                        mp.start();
                        idx+=1;
                    }               
                }
            });
        }
    
        @Override
        protected Void doInBackground(Void... params) {
            try {
                mediaPlayer.start();
            } catch (IllegalArgumentException e) {
                Log.e(LOG_TAG, "", e);
            } catch (SecurityException e) {
                Log.e(LOG_TAG, "", e);
            } catch (IllegalStateException e) {
                Log.e(LOG_TAG, "", e);
            }
    
            return null;
        }
    }
    
    0 讨论(0)
  • 2020-12-10 21:24

    you are on the right way, don't need a lot of OnCompletionListener´s.

    //define a variable to be used as index.
    int audioindex = 0;
    //Extract the files into an array
    String[] files = null;
    files = assetManager.list("audiofiles");
    

    then in your OnCompletionListener.

     mp.setOnCompletionListener(new OnCompletionListener(){
        // @Override
        public void onCompletion(MediaPlayer arg0) {
        // File has ended, play the next one.
       FunctionPlayFile(files[audioindex]);
       audioindex+=1; //increment the index to get the next audiofile
         }
    });
    
    0 讨论(0)
提交回复
热议问题