IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Mobile en Java Discussion :

Récupérer le genre d'une musique


Sujet :

Développement Mobile en Java

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut Récupérer le genre d'une musique
    Salut,
    J'ai un soucis, je souhaite récupérer le genre d'une musique, mais je ne trouve pas le moyen de le faire, quelqu'un a-t-il une idée?

    Merci d'avance!

  2. #2
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Bonjour,

    votre musique est taggée ou pas ?

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    yes

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    Les tags sont dans ton fichier MP3. Plus d'infos ici

    Il faut donc que tu lises ton fichier en utilisant RandomAccessFile par exemple

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Effectivement entre temps j'avais vu cette info,

    seulement un soucis se pose, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    try{
    FileInputStream file = new FileInputStream(mon_fichier);
    int size = (int) mon_fichier.length();
    file.skip(size-1);
    byte dernier_octet = new byte
    file.read(dernier_octet);
    String genre = new String(dernier_octet);
    file.close();
    }
    catch (Exception e){
        bla bla bla...
    }
    return genre;
    Malheuresement je ne maitrise pas vraiment les try/catch, le genre retourne ne contient rien...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    enleves le parametre de file.read();

    et pense à mettre des balises autour de ton code pour qu'il apparaisse mieux sur le site.

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    String recupGenre(){
    int genre = 0;
    try{
    FileInputStream file = new FileInputStream(mon_fichier);
    int size = (int)mon_fichier.length();
    file.skip(size-1);
    genre = file.read();
    file.close();
    }
    catch(Exception e)
    { System.print........blabla}
     
    return String.valueOf(genre);
    }
    Mais "rien" n'est retourne, j'ai l'impression que "genre = file.read();" n'est pas pris en compte, je recois 0 en retour...

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    0 ce n'est pas rien ça doit bien être le dernier octet du fichier.

    2 solutions:


    la premiere tu écoutes du blues (cf lien précédent, tu cliques sur détails des genres et tu verras que 0 correspond à blues)

    la seconde, toujours dans le lien précédent tu as pu voir que tous les tags ne sont pas codés de la même façon. Certains sont au début du fichier.

    Pour en être sur je te conseille d'ouvrir ton fichier avec un editeur hexa ainsi tu pourras faire des tests plus facilement. J'utilise CR-Hexact c'est gratuit

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Merci.

    Donc en visionnant le fichier je constate que l'octet concerne (effectivement le dernier) était sur 12, ce qui correspond a "autre" (donc genre mal "tague" je suppose?)

    Donc j'ai bien un problème de code, j'ai pas l'impression de récupérer la valeur de genre dans le try...

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Salut,
    Je pense que le problème vient du fait que la methode read() ne lit pas 1 octet à la fois. Je te propose donc d'utiliser la methode readUnsignedByte() de DataInputStream. En remarque dans le programme pour lire tout le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    import javax.swing.*;
    import java.io.*;
    import javax.swing.filechooser.*;
    import javax.swing.filechooser.FileFilter;
     
     
    public class GenreMP3 {
     
    	JFileChooser fileChooser = new JFileChooser(new File("."));
    	FileFilter filter = new FileNameExtensionFilter("MP3 File","mp3");
    	File fichier;
     
    	public GenreMP3() {
    		fileChooser.addChoosableFileFilter(filter);
    		if(fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    			fichier = fileChooser.getSelectedFile();
    			try {
    				DataInputStream ips=new DataInputStream(new FileInputStream(fichier)); 
    				boolean eof = false;
    				/*while (!eof) {
    					try {
    						System.out.println(ips.readUnsignedByte());
    					}
    					catch(EOFException e) {
    						eof = true;
    					}
    				}*/
    				ips.skipBytes((int)fichier.length()-1);
    				System.out.println(ips.readUnsignedByte());
    			}
    			catch(IOException ee) {}
    		}
    	}
    	public static void main(String[] args) {
    		GenreMP3 mp3 = new GenreMP3();	
    	}
     
    }

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Même résultat...j'ai change l'initialisation de l'entier genre a 1, et ça me renvoi maintenant 1, donc effectivement genre n'est pas modifie dans le reste du code...

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,
    As tu essayé le programme que je t'ai proposé en utilisant DataInputStream à la place de FileInputStream?
    Car il fonctionne parfaitement chez moi.
    Si tu l'as essayé et que ça ne fonctionne pas, envoies moi le .mp3 que tu utilises.

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Oui, mp

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Re Bonjour,

    J'ai essayé ton fichier avec le programme ci-dessus et il m'indique bien 14 soir RnB.

    Postes le code complet que tu utilise et on va solutionner le truc.

  15. #15
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public String recupGenre(){
    int genre = 1;
    try{
    FileInputStream file = new FileInputStream(MediaStore.Audio.Media.DATA);
    int size = (int)mon_fichier.length();
    DataInputStream ips = new DataInputStream(file);
    ips.skipBytes(size-1);
    genre = ips.readUnsignedByte();
    file.close();
    }
    catch(Exception e)
    { 
    System.println ("error");
    }
     
    return String.valueOf(genre);
    }

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Citation Envoyé par ptitnicois Voir le message
    [code]public String recupGenre(){
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FileInputStream file = new FileInputStream(MediaStore.Audio.Media.DATA);
    int size = (int)mon_fichier.length();

    tu mélanges 2 méthode là????

    pour récupérer le genre tu peux soit lire dans le MP3 comme je te propose et dans ce cas, remplaces "MediaStore.Audio.Media.DATA" par "mon_fichier" et ça devrait fonctionner.

    Sinon il y a effectivement une autre méthode en Utilisant le MEDIASTORE mais bon une chose à la fois...

  17. #17
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Ah ok, le but c’était de récupérer le fichier qui est joue d'ou l'utilisation de Mediastore

  18. #18
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Y'a des lib java toutes faites qui vont bien aussi. (comme celle la par exemple, ou celle la par contre j'avais pas vu que c'était pour du java mobile).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Et du coup un moyen de récupérer ce fameux genre de la musique qui est joue par le lecteur?

  20. #20
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    En tout cas elle te permettront d'aller chercher le field GENRE ca c'est sure. Après je comprends pas lien avec "le lecteur" il vient d'ou ce lecteur ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2013, 12h50
  2. [FMOD] Récupérer un canal (une musique)
    Par outmane15 dans le forum FMOD
    Réponses: 1
    Dernier message: 12/04/2012, 10h01
  3. Réponses: 2
    Dernier message: 17/09/2011, 21h13
  4. Récupérer l'année d'une date
    Par delphim dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/01/2003, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo