Lier choix Spinner et Lyrics au MediaPlayer
Résolu
Umwami
Messages postés
140
Date d'inscription
Statut
Membre
Dernière intervention
-
Umwami Messages postés 140 Date d'inscription Statut Membre Dernière intervention -
Umwami Messages postés 140 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous et à toutes ! ="D
Alors voilà, je développe une "App" test via Android Studio qui n'est rien d'autre qu'un lecteur Audio (avec Lyrics + Spinner en haut pour sélectionner la musique)
et après avoir parcouru bon nombre de Tutos Youtube et de site internet pour trouver la méthode à suivre, je n'ai pas trouver comment (dans MainActivity)
lier les différents choix de musique (Spinner) au lecteur audio ainsi que l'affichage des Lyrics de la chanson sélectionner.
Voici une capture d'écran de l'App (MainActivity) :
Ainsi que le code MainActivity:
Merci d'avance pour votre aide
PS : Touts les fichiers audio, lyrics sont dans l'application (Audio dans "raw" et lyrics dans....Je ne sais pas encore où les mettre).
Et bien sur les musiques afficher sur la photo ne sont pas dans l'App (Droits d'auteur), ce ne sont que des exemples.
Alors voilà, je développe une "App" test via Android Studio qui n'est rien d'autre qu'un lecteur Audio (avec Lyrics + Spinner en haut pour sélectionner la musique)
et après avoir parcouru bon nombre de Tutos Youtube et de site internet pour trouver la méthode à suivre, je n'ai pas trouver comment (dans MainActivity)
lier les différents choix de musique (Spinner) au lecteur audio ainsi que l'affichage des Lyrics de la chanson sélectionner.
Voici une capture d'écran de l'App (MainActivity) :

Ainsi que le code MainActivity:
package be.umwami.looply; import android.media.MediaPlayer; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends AppCompatActivity { //Spinner Spinner spinner; int currentItem = 0; //Eléments de l'activitée Button playBtn; SeekBar positionBar; SeekBar volumeBar; TextView elapsedTimeLabel; TextView remainingTimeLabel; MediaPlayer mp; int totalTime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner = (Spinner)findViewById(R.id.spinner); //Paramètres Musique playBtn = (Button) findViewById(R.id.playBtn); elapsedTimeLabel = (TextView) findViewById(R.id.elapsedTimeLabel); remainingTimeLabel = (TextView) findViewById(R.id.remainingTimeLabel); // Media Player mp = MediaPlayer.create(this, R.raw.queen_mama); mp.setLooping(true); mp.seekTo(0); mp.setVolume(1f, 1f); totalTime = mp.getDuration(); // Position Bar positionBar = (SeekBar) findViewById(R.id.positionBar); positionBar.setMax(totalTime); positionBar.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { mp.seekTo(progress); positionBar.setProgress(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } } ); // Volume Bar volumeBar = (SeekBar) findViewById(R.id.volumeBar); volumeBar.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float volumeNum = progress / 100f; mp.setVolume(volumeNum, volumeNum); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } } ); // Thread (Update positionBar & timeLabel) new Thread(new Runnable() { @Override public void run() { while (mp != null) { try { Message msg = new Message(); msg.what = mp.getCurrentPosition(); handler.sendMessage(msg); Thread.sleep(1000); } catch (InterruptedException e) {} } } }).start(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int currentPosition = msg.what; // Update positionBar. positionBar.setProgress(currentPosition); // Update Labels. String elapsedTime = createTimeLabel(currentPosition); elapsedTimeLabel.setText(elapsedTime); String remainingTime = createTimeLabel(totalTime-currentPosition); remainingTimeLabel.setText("- " + remainingTime); } }; public String createTimeLabel(int time) { String timeLabel = ""; int min = time / 1000 / 60; int sec = time / 1000 % 60; timeLabel = min + ":"; if (sec < 10) timeLabel += "0"; timeLabel += sec; return timeLabel; } public void playBtnClick(View view) { if (!mp.isPlaying()) { // Stopping mp.start(); playBtn.setBackgroundResource(R.drawable.stop); } else { // Playing mp.pause(); playBtn.setBackgroundResource(R.drawable.play); } } }
Merci d'avance pour votre aide
PS : Touts les fichiers audio, lyrics sont dans l'application (Audio dans "raw" et lyrics dans....Je ne sais pas encore où les mettre).
Et bien sur les musiques afficher sur la photo ne sont pas dans l'App (Droits d'auteur), ce ne sont que des exemples.
A voir également:
- Lier choix Spinner et Lyrics au MediaPlayer
- Liste déroulante de choix excel - Guide
- Lyrics titreauteur - Télécharger - Audio & Musique
- Comment spinner un texte - Télécharger - Outils professionnels
- Lier calendrier outlook et gmail - Guide
- Content spinner - Télécharger - Traitement de texte
2 réponses
Hello,
Quel est ton problème exactement ?
- Afficher des valeurs dans ton Spinner ?
- Récupérer la valeur sélectionnée ?
- Stocker tes fichiers ?
- Jouer tes fichiers ?
Quel est ton problème exactement ?
- Afficher des valeurs dans ton Spinner ?
- Récupérer la valeur sélectionnée ?
- Stocker tes fichiers ?
- Jouer tes fichiers ?
Alors, il te faut:
- un listener sur ton Spinner pour connaître le changement de sélection
- un mapping pour associer telle musique avec tels lyrics. Tu peux créer par exemple une liste d'objet
Cet objet va permettre d'alimenter ton Spinner.
- une
- un listener sur ton Spinner pour connaître le changement de sélection
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // ton code ici } @Override public void onNothingSelected(AdapterView<?> parentView) { // ton code ici } });
- un mapping pour associer telle musique avec tels lyrics. Tu peux créer par exemple une liste d'objet
Music:
public class Music { String mTitle; // Titre de la musique int mResMusicId; // ID de la ressource musicale int mResLyricsId; // ID de la ressource lyrics }
Cet objet va permettre d'alimenter ton Spinner.
- une
TextViewpour afficher le texte des lyrics. Peut-être prévoir une
ScrollViewsi le texte est trop long....
au niveau du setOnItemSelectedListener , je comprend que c'est là que je met ce qui va se passer lorsque je vais appuyer sur un Item dans le Spinner, mais étant donner que j'ai 220 musiques à mettre, dois-je faire une sorte de "case" partant de la position 0 à 219 ? en mentionnant dans chaque "case" l'id de la musique à charger dans le MediaPlayer et les Lyrics à afficher ?
Je suis assez à l'aise avec le XML mais j'ai un réel souci avec la structure dans le MainActivity, je sais que c'est une évidence pour vous et je m'en excuse ="/
Je suis assez à l'aise avec le XML mais j'ai un réel souci avec la structure dans le MainActivity, je sais que c'est une évidence pour vous et je m'en excuse ="/
reçu 5/5 !
Je viens d'essayer ceci (Oui je raisonne en C++ haha) mais ca n'as rien donner :
Je vais tester votre dernier conseil, à tout à l'heure. =")
Je viens d'essayer ceci (Oui je raisonne en C++ haha) mais ca n'as rien donner :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner)findViewById(R.id.spinner_chansons);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
if(position==0){
mp.setDataSource(R.raw.queen_mama);
}
if(position==1) {
mp.setDataSource(R.raw.eurythmics_sweet_dreams);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
Je vais tester votre dernier conseil, à tout à l'heure. =")
Comme ce ci ? :
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { public class Music { String mTitle; int mResMusicId; int mResLyricsId; } } @Override public void onNothingSelected(AdapterView<?> parentView) { return; } });
Alors oui, petit rappel du fonctionnement de l'App :
Sélection de la chanson via la liste dans le Spinner, affichage des Lyrics en fonction de la chanson et chargement de la musique dans le MediaPlayer.
Ma question :
Comment faire en sorte que quand je sélectionne une musique dans le Spinner, les paroles s'affichent (au milieu de l'ecran) et la musique se charge dans le MediaPlayer tout simplement.
PS : Je sais que c'est simple à faire mais je suis un novice en la matière. J'ai beau chercher le code à mettre dans MainActivity.java dans des Tutos, Forums...etc mais je ne trouve pas.
Encore merci pour vos réponses BrunoCS.