8
votes

Jouer des fichiers audio l'un après l'autre

J'ai une liste de fichiers audio comme celui-ci,

void _function_play_file(int files) {

        switch (files) {
        case 0:
            mPlayer = MediaPlayer.create(this, music_numbers[0]);
            mPlayer.start();
        case 1:
            mPlayer = MediaPlayer.create(this, music_numbers[1]);
            mPlayer.start();
        case 2:
            mPlayer = MediaPlayer.create(this, music_numbers[2]);
            mPlayer.start();
        case 3:
            mPlayer = MediaPlayer.create(this, music_numbers[3]);
            mPlayer.start();
        case 4:
            mPlayer = MediaPlayer.create(this, music_numbers[4]);
            mPlayer.start();
        case 5:
            mPlayer = MediaPlayer.create(this, music_numbers[5]);
            mPlayer.start();
        case 6:
            mPlayer = MediaPlayer.create(this, music_numbers[6]);
            mPlayer.start();
        case 7:
            mPlayer = MediaPlayer.create(this, music_numbers[7]);
            mPlayer.start();
        case 8:
            mPlayer = MediaPlayer.create(this, music_numbers[8]);
            mPlayer.start();
        case 9:
            mPlayer = MediaPlayer.create(this, music_numbers[9]);
            mPlayer.start();
        case 10:
            mPlayer = MediaPlayer.create(this, music_numbers[10]);
            mPlayer.start();

        }
    }


2 commentaires

Tout d'abord, votre commutateur manque les pauses; Vous n'auriez pas pu utiliser mplayer = mediafplayer.create (ceci, music_numbers [fichiers]) à la place?


Tous les cas dans la casse-commissarium doivent être terminés par «pause». Visitez ici -> docs.oracle.com/javase/tatuly/java/ Nutsandbolts / Switch.htm L


7 Réponses :


6
votes

Vous devez définir un activétionnerlistener sur chacun et démarrer la suivante à la fin.

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{
    @Override
    public void onCompletion(MediaPlayer mp) 
    {
         // Code to start the next audio in the sequence
    }
});


1 commentaires

Donc, si je veux jouer 20 fichiers l'un après l'autre, devrai-je nier le SetonCompletionListener à l'autre 20 fois?



-1
votes
 MediaPlayer mediaplayer = new MediaPlayer();                                
    setSound(file );    
    try {
    if(mediaplayer != null)
        {
            mediaplayer.stop();
            mediaplayer.release();
            }
            mediaplayer.setDataSource(getResources().openRawResourceFd(file)
                                             .getFileDescriptor());
            mediaplayer.prepare();  
            mediaplayer = MediaPlayer.create(getBaseContext(), now); 
            mediaplayer.start();                     
            mediaplayer.setLooping(false);
            mediaplayer.setLooping(true); //sequence playing                    

            }   catch (NullPointerException e) {                         
                    e.printStackTrace();
       }

0 commentaires

1
votes

Ce code fonctionne pour moi, mais je place les fichiers audio dans le dossier Actifs:

//define a variable to be used as index.
int audioindex = 0;
//Extract the files into an array
String[] files = null;
files = assetManager.list("audiofiles");
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 commentaires

5
votes

Utilisez une file d'attente pour maintenir les chiffres à lire.

private void _play_numbers(final String i) {
    // e.g '100': put '1', '0', '0' in a Queue after converting to digits
    Queue queue = new LinkedList();
    //Use the add method to add items.

    myDigit = // remove next digit from queue..

    _function_play_file(myDigit);
}

void _function_play_file(int files) {
     switch(files) {
       case 0:
        mPlayer = MediaPlayer.create(PlayFileActivity.this, R.raw.payment);
        mPlayer.setOnCompletionListener(completeListener );
        mPlayer.start();
        break;
 .....
 }

OnCompletionListener completeListener = new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.release();
        myDigit = // remove next digit from queue..
        if (myDigit != -1)  // if queue is not empty..
            _function_play_file(myDigit);
    }
});


0 commentaires

1
votes

Ceci est Code de temps de travail pour la lecture de chansons dans Continuer LOOP

public class MainActivity extends Activity 
{
    private int[] tracks = {R.raw.explosion,R.raw.pianothingy_one,R.raw.car_horn_x};
    int mCompleted = 0;

 public void onCreate(Bundle savedInstanceState) 
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 MediaPlayer mp = MediaPlayer.create(this, tracks[0]);
 mp.setOnCompletionListener(new OnCompletionListener() 
 {
     @Override
     public void onCompletion(MediaPlayer mp)
     {
         mCompleted++;
         mp.reset();
         if (mCompleted < tracks.length) 
         {
             try
             {
                 AssetFileDescriptor afd = getResources().openRawResourceFd(tracks[mCompleted]);
                 if (afd != null) 
                 {
                     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                     afd.close();
                     mp.prepare();
                     mp.start();
                 }
             }
             catch (Exception ex) 
             {
                ex.printStackTrace();
             }

         } 
         else if (mCompleted>=tracks.length) 
         {
             mCompleted =0;
             try
             {
                 AssetFileDescriptor afd = getResources().openRawResourceFd(tracks[mCompleted]);
                 if (afd != null) 
                 {
                     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                     afd.close();
                     mp.prepare();
                     mp.start();
                 }
             }
             catch (Exception ex) 
             {
                ex.printStackTrace();
             }
         }
         else
         {
             mCompleted=0;
              mp.release();
              mp = null;
         }

     }
 });

 mp.start(); 


0 commentaires

0
votes

Utilisez playMedia comme ceci xxx

et définir la classe lectureMedia comme celui-ci xxx


0 commentaires

0
votes

Pour moi, le problème était que j'appelle mediafplayer.prepare () sans première appelant mediaplayer.reset () . .

tout bon maintenant.


0 commentaires