2010-06-21 3 views
1

J'ai besoin d'aide/pointeur sur doc/exemple de code pour charger plusieurs fichiers audio d'un dossier spécifique sur la carte SD et lui faire lire un fichier aléatoire (je pense que je peux comprendre la dernière étape si je pouvais juste comprendre comment charger plusieurs fichiers). Voici mon application incroyablement mal écrite jusqu'à présent, ne jugez pas trop durement que j'apprends comme je vais.Chargement de plusieurs fichiers audio à partir de la carte SD

public class zazenbox extends Activity implements OnClickListener{ 

File filecheck; 
MediaPlayer player; 
Button playerButton; 
Integer var1; 
String path1; 
AlertDialog.Builder alertbox; 

public void onClick(View v) { 
    if (v.getId() == R.id.play) { 
     playPause(); 
    } 
} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    demoLoad(); 

    playerButton = (Button) this.findViewById(R.id.play); 
    playerButton.setText(R.string.stop); 
    playerButton.setOnClickListener(this); 

    demoPlay(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    player.pause(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    player.stop(); 
} 

private void demoLoad() { 

    dirfilecheck(); 

    player = new MediaPlayer(); 
    player.setLooping(true); 
    try { 
     player.setDataSource(path1); 
     player.prepare(); 
    } 
    catch (IOException e) { e.printStackTrace(); } 
    catch (IllegalArgumentException e) { e.printStackTrace(); } 
    catch (IllegalStateException e) { e.printStackTrace(); } 
} 

private void dirfilecheck() { 
    filecheck = new File(Environment.getExternalStorageDirectory() + "/zazenbox"); 

    if(filecheck.exists() && filecheck.isDirectory()) { 
     // load files. 
     var1 = 1; 
     path1 = filecheck + "/bm10" + var1 + ".wav"; 
    } else { 
     // create folder, dl sample loop, and instruct user how to add music/loops. 
     filecheck.mkdirs(); 
     alertbox = new AlertDialog.Builder(this); 
     alertbox.setMessage("Please put loopable media in zazenbox on your sdcard."); 
     alertbox.setNeutralButton("Ok, I will.", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 
       Toast.makeText(getApplicationContext(), "Please plug in your device now", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     alertbox.show(); 
    } 
} 

private void demoPause() { 
    player.pause(); 
    playerButton.setText(R.string.play); 
} 

private void demoStop() { 
    player.stop(); 
    playerButton.setText(R.string.play); 
} 


private void demoPlay() { 
    player.start(); 
    playerButton.setText(R.string.stop); 
} 

private void playPause() { 
    if(player.isPlaying()) { 
     demoStop(); 
     //demoPause(); 
     //player.release(); 
     var1++; 
     path1 = filecheck + "/bm10" + var1 + ".wav"; 
     /*try { 
      player.setDataSource(path1); 
      player.prepare(); 
     } 
     catch (IOException e) { e.printStackTrace(); } 
     catch (IllegalArgumentException e) { e.printStackTrace(); } 
     catch (IllegalStateException e) { e.printStackTrace(); }*/ 
     //player.start(); 
     //demoPlay(); 
    } else { 
     //do stuff 
     demoPlay(); 
    } 
} 

}

Répondre

1

La mémoire est extrêmement limitée sur les appareils mobiles, de sorte que vous ne voudriez pas charger les morceaux que vous n'êtes pas allez jouer. Donc, ce que vous devriez faire est de trouver tous les fichiers audio dans ce dossier, puis en choisir un et ALORS charger et jouer.

Vous avez juste besoin d'arrêter le lecteur en cours et de créer une nouvelle instance.

MediaPlayer player = MediaPlayer.create(this, Uri.parse("Path/To/Media")); 
player.start(); 
// change track 
player.stop(); 
player = MediaPlayer.create(this, Uri.parse("New/Path/To/Media")); 
player.start(); 
+0

Assez juste, et je comprends cela. Donc, ma question n'était pas correctement indiquée (c'est-à-dire que je voulais dire charger une liste ou un tableau pas les fichiers réels), mais vous comprenez ce que j'essaie de faire. Ce ne sont pas des chansons, ce sont généralement des fichiers audio de 20 à 30 secondes, conçus pour être bouclés facilement. – zer0her0

+0

Si vous savez où tous les fichiers sont stockés (disons un dossier spécifique sur la carte SD) alors obtenir une liste des fichiers est facile: Fichier dossier = nouveau Fichier ("path/to/dossier"); Fichier [] files = folder.listFiles(); OU Fichier [] files = folder.listFiles (fileFilter); – mtmurdock

+0

Ok, je devrais peut-être clarifier, je peux charger les fichiers multiples dans un tableau/liste assez bien (autant que je sache). Ce que je ne peux pas faire est d'obtenir le mediaplayer pour libérer le fichier audio en cours de lecture et en jouer un autre. – zer0her0

Questions connexes