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!
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!
Bonjour,
votre musique est taggée ou pas ?
yes
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
Effectivement entre temps j'avais vu cette info,
seulement un soucis se pose, voici mon code :
Malheuresement je ne maitrise pas vraiment les try/catch, le genre retourne ne contient rien...
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;
enleves le parametre de file.read();
et pense à mettre des balises autour de ton code pour qu'il apparaisse mieux sur le site.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 file.read();
Mais "rien" n'est retourne, j'ai l'impression que "genre = file.read();" n'est pas pris en compte, je recois 0 en retour...
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); }
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
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...
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(); } }
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...
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.
Oui, mp![]()
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.
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); }
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...![]()
Ah ok, le but c’était de récupérer le fichier qui est joue d'ou l'utilisation de Mediastore
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
Et du coup un moyen de récupérer ce fameux genre de la musique qui est joue par le lecteur?
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
Partager