2012-05-28 16 views
9

tengo una lista de archivos de audio como este,Reproducción de archivos de audio, uno tras otro

int music_numbers[] = { R.raw.one, R.raw.two, R.raw.three, R.raw.four, 
      R.raw.five, R.raw.six, R.raw.seven, R.raw.eight, R.raw.nine }; 

que necesito para jugar este uno por uno - cuando envío 100 de este método play_numbers - soy la intención de jugar dígitos sabia ..

he hecho esto - pero no puede hacer esto, uno tras otro ..

private void _play_numbers(final String i) { 
    // TODO Auto-generated method stub 

    mPlayer = MediaPlayer.create(PlayFileActivity.this, R.raw.payment); 
    mPlayer.start(); 

    mPlayer.setOnCompletionListener(new OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      mPlayer.stop(); 
      myDigit = i.charAt(1) + ""; 

      _function_play_file(Integer.parseInt(myDigit)); 

     } 

    }); 

} 

en _function_play_file - tengo este

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(); 

     } 
    } 
+0

En primer lugar, su interruptor no tiene los saltos; ¿No podría usar mPlayer = MediaPlayer.create (this, music_numbers [files]) en su lugar? – Urho

+0

¿Cuál es el error? –

+0

Todos los casos en la caja del interruptor deben terminar con 'break'. Visita aquí -> http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – OguzOzkeroglu

Respuesta

6

Debe configurar un onCompletionListener para cada uno y comenzar el siguiente al finalizar.

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

La mejor manera de conseguir esto es crear una clase que implementa OnCompletionListener que se ocupa de la onCompletion y recibe el siguiente archivo que desea reproducir. De esta forma, puedes crear una instancia muy bien en tu código. Por supuesto, no olvide su descanso; en los casos anteriores.

+0

Así que si quiero jugar 20 archivos uno después de otro, tendré que anidar el setOnCompletionListener uno dentro del otro 20 veces ? –

0
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(); 
     } 
1

Este código funciona para mí, pero yo coloque los archivos de audio en la carpeta de activos:

//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 
    } 
}); 
4

utilizar una cola para la celebración de los números para ser jugados.

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); 
    } 
}); 

}

1

Este es el código de trabajo para la reproducción de canciones en continuar bucle

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

Playmedia uso gusta esta

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

y definir Playmedia clase como esta

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; 
    } 
} 
Cuestiones relacionadas