Lier choix Spinner et Lyrics au MediaPlayer
Résolu
Umwami
Messages postés
150
Statut
Membre
-
Umwami Messages postés 150 Statut Membre -
Umwami Messages postés 150 Statut Membre -
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
- Content spinner - Télécharger - Traitement de texte
- Lier calendrier outlook et gmail - Guide
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.