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(); } }
7 Réponses :
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 } });
Donc, si je veux jouer 20 fichiers l'un après l'autre, devrai-je nier le SetonCompletionListener à l'autre 20 fois?
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(); }
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 } });
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); } });
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();
Utilisez playMedia comme ceci et définir la classe lectureMedia comme celui-ci p>
Pour moi, le problème était que j'appelle tout bon maintenant. p> mediafplayer.prepare () code> sans première appelant
mediaplayer.reset () code>. p>.
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