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