Mp3 et Winamp...

fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009 - 26 août 2005 à 18:19
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009 - 1 sept. 2005 à 11:34
Bonjour,
Je voudrais écrire un bout de code qui récupère le nom et éventuellement prénom de l'artiste et le titre d'un mp3.
Je ne comprends pas comment Winamp fait pour reconnaitre le nom du mp3 et de l'artiste quand ils ne sont pas accessible dans les propriétés du mp3?
Si quelqu'un a une piste ou une id, je l'en remercie d'avance.
Fred.

5 réponses

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
26 août 2005 à 22:01
Violent Ken

Winamp lit tout simplement les tags de tes mp3.
Tiens, un code :

Global ReadOnly As Boolean
Dim FF
Dim txt1 As String * 30
Dim txt2 As String * 4
Global sngG As Byte
Public Enum Mp3GenreConv
VersTexte = 0
VersByte = 1
End Enum
Option Explicit


Public Function GetTitre(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 124, txt1
Close FF
GetTitre = Trim$(txt1)
End Function


Public Function GetAuteur(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 94, txt1
Close FF
GetAuteur = Trim$(txt1)
End Function


Public Function GetAlbum(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 64, txt1
Close FF
GetAlbum = Trim$(txt1)
End Function


Public Function GetCommentaire(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 30, txt1
Close FF
GetCommentaire = Trim$(txt1)
End Function


Public Function GetAnnee(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 34, txt2
Close FF
GetAnnee = Trim$(txt2)
End Function


Public Function GetGenre(fichier As String) As String
If CheckTag(fichier, False) = False Then
MsgBox "Le fichier n'est pas taggé !", vbInformation + vbOKOnly, "Tag"
Exit Function
End If
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier), sngG
Close FF
If sngG > 79 Then sngG = 12
GetGenre = GenreConv(VersTexte, sngG)
End Function


Public Function PutTitre(fichier As String, Titre As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
txt1 = Titre
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier) - 124, txt1
Close FF
End Function


Public Function PutAuteur(fichier As String, Auteur As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
txt1 = Auteur
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier) - 94, txt1
Close FF
End Function


Public Function PutAlbum(fichier As String, Album As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
txt1 = Album
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier) - 64, txt1
Close FF
End Function


Public Function PutCommentaire(fichier As String, Commentaire As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
txt1 = Commentaire
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier) - 30, txt1
Close FF
End Function


Public Function PutAnnee(fichier As String, Annee As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
txt2 = Annee
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier) - 34, txt2
Close FF
End Function


Public Function PutGenre(fichier As String, Genre As String)
CheckTag fichier, True
If ReadOnly = True Then Exit Function
sngG = GenreConv(VersByte, Genre)
FF = FreeFile
Open fichier For Binary As FF
Put FF, FileLen(fichier), sngG
Close FF
End Function


Public Function GenreConv(Sens As Mp3GenreConv, Genre As Variant) As Variant
Dim G As Variant
If Sens = VersByte Then
If VarType(Genre) <> vbString Then
MsgBox "Le genre doit être du texte !", vbExclamation + vbOKOnly
GenreConv = -1
Exit Function
End If
Select Case Genre
Case "Blues"
G = 0
Case "Classic Rock"
G = 1
Case "Country"
G = 2
Case "Dance"
G = 3
Case "Disco"
G = 4
Case "Funk"
G = 5
Case "Grunge"
G = 6
Case "Hip-Hop"
G = 7
Case "Jazz"
G = 8
Case "Metal"
G = 9
Case "New Age"
G = 10
Case "Oldies"
G = 11
Case "Other"
G = 12
Case "Pop"
G = 13
Case "R&B"
G = 14
Case "Rap"
G = 15
Case "Reggae"
G = 16
Case "Rock"
G = 17
Case "Techno"
G = 18
Case "Industrial"
G = 19
Case "Alternative"
G = 20
Case "Ska"
G = 21
Case "Death Metal"
G = 22
Case "Pranks"
G = 23
Case "Soundtrack"
G = 24
Case "Euro-Techno"
G = 25
Case "Ambient"
G = 26
Case "Trip-Hop"
G = 27
Case "Vocal"
G = 28
Case "Jazz+Funk"
G = 29
Case "Fusion"
G = 30
Case "Trance"
G = 31
Case "Classical"
G = 32
Case "Instrumental"
G = 33
Case "Acid"
G = 34
Case "House"
G = 35
Case "Game"
G = 36
Case "Sound Clip"
G = 37
Case "Gospel"
G = 38
Case "Noise"
G = 39
Case "AlternRock"
G = 40
Case "Bass"
G = 41
Case "Soul"
G = 42
Case "Punk"
G = 43
Case "Space"
G = 44
Case "Meditative"
G = 45
Case "Instrumental Pop"
G = 46
Case "Instrumental Rock"
G = 47
Case "Ethnic"
G = 48
Case "Gothic"
G = 49
Case "Darkwave"
G = 50
Case "Techno-Industrial"
G = 51
Case "Electronic"
G = 52
Case "Pop-Folk"
G = 53
Case "Eurodance"
G = 54
Case "Dream"
G = 55
Case "Southern Rock"
G = 56
Case "Comedy"
G = 57
Case "Cult"
G = 58
Case "Gangsta"
G = 59
Case "Top 40"
G = 60
Case "Christian Rap"
G = 61
Case "Pop/Funk"
G = 62
Case "Jungle"
G = 63
Case "Native American"
G = 64
Case "Cabaret"
G = 65
Case "New Wave"
G = 66
Case "Psychadelic"
G = 67
Case "Rave"
G = 68
Case "Showtunes"
G = 69
Case "Trailer"
G = 70
Case "Lo-Fi"
G = 71
Case "Tribal"
G = 72
Case "Acid Punk"
G = 73
Case "Acid Jazz"
G = 74
Case "Polka"
G = 75
Case "Retro"
G = 76
Case "Musical"
G = 77
Case "Rock & Roll"
G = 78
Case "Hard Rock"
G = 79
End Select
End If
If Sens = VersTexte Then
If VarType(Genre) <> vbByte Then
MsgBox "Le genre doit être de type Byte !", vbExclamation + vbOKOnly
GenreConv = -1
Exit Function
End If
Select Case Genre
Case 0
G = "Blues"
Case 1
G = "Classic Rock"
Case 2
G = "Country"
Case 3
G = "Dance"
Case 4
G = "Disco"
Case 5
G = "Funk"
Case 6
G = "Grunge"
Case 7
G = "Hip-Hop"
Case 8
G = "Jazz"
Case 9
G = "Metal"
Case 10
G = "New Age"
Case 11
G = "Oldies"
Case 12
G = "Other"
Case 13
G = "Pop"
Case 14
G = "R&B"
Case 15
G = "Rap"
Case 16
G = "Reggae"
Case 17
G = "Rock"
Case 18
G = "Techno"
Case 19
G = "Industrial"
Case 20
G = "Alternative"
Case 21
G = "Ska"
Case 22
G = "Death Metal"
Case 23
G = "Pranks"
Case 24
G = "Soundtrack"
Case 25
G = "Euro-Techno"
Case 26
G = "Ambient"
Case 27
G = "Trip-Hop"
Case 28
G = "Vocal"
Case 29
G = "Jazz+Funk"
Case 30
G = "Fusion"
Case 31
G = "Trance"
Case 32
G = "Classical"
Case 33
G = "Instrumental"
Case 34
G = "Acid"
Case 35
G = "House"
Case 36
G = "Game"
Case 37
G = "Sound Clip"
Case 38
G = "Gospel"
Case 39
G = "Noise"
Case 40
G = "AlternRock"
Case 41
G = "Bass"
Case 42
G = "Soul"
Case 43
G = "Punk"
Case 44
G = "Space"
Case 45
G = "Meditative"
Case 46
G = "Instrumental Pop"
Case 47
G = "Instrumental Rock"
Case 48
G = "Ethnic"
Case 49
G = "Gothic"
Case 50
G = "Darkwave"
Case 51
G = "Techno-Industrial"
Case 52
G = "Electronic"
Case 53
G = "Pop-Folk"
Case 54
G = "Eurodance"
Case 55
G = "Dream"
Case 56
G = "Southern Rock"
Case 57
G = "Comedy"
Case 58
G = "Cult"
Case 59
G = "Gangsta"
Case 60
G = "Top 40"
Case 61
G = "Christian Rap"
Case 62
G = "Pop/Funk"
Case 63
G = "Jungle"
Case 64
G = "Native American"
Case 65
G = "Cabaret"
Case 66
G = "New Wave"
Case 67
G = "Psychadelic"
Case 68
G = "Rave"
Case 69
G = "Showtunes"
Case 70
G = "Trailer"
Case 71
G = "Lo-Fi"
Case 72
G = "Tribal"
Case 73
G = "Acid Punk"
Case 74
G = "Acid Jazz"
Case 75
G = "Polka"
Case 76
G = "Retro"
Case 77
G = "Musical"
Case 78
G = "Rock & Roll"
Case 79
G = "Hard Rock"
End Select
End If
GenreConv = G
End Function


Private Function CheckTag(fichier As String, Ecrire As Boolean) As Boolean
ReadOnly = FalseIf (GetAttr(fichier) 1 Or GetAttr(fichier) 33) And Ecrire = True Then
MsgBox "Le fichier est en lecture seule !", vbExclamation + vbOKOnly, "Tag"
ReadOnly = True
Exit Function
End If
CheckTag = True
Dim Tag As String * 3
FF = FreeFile
Open fichier For Binary As FF
Get FF, FileLen(fichier) - 127, Tag
If Tag <> "TAG" Then CheckTag = FalseIf Ecrire True And CheckTag False Then
Dim TagSpace As String * 128
TagSpace = "TAG"
Put FF, FileLen(fichier), TagSpace
End If
Close FF
End Function

@+
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
26 août 2005 à 22:12
Précise que ton code n'est valide que pour les tag V1
0
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
27 août 2005 à 08:37
Merci beaucoup pour le code, juste pour info, quelle est la différence entre Tag1, Tag2, Tag3 etc.... ?
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
27 août 2005 à 10:22
Il existe que deux versions de tags en fait. La V1 et la V2. Chacune
ayant des variante. La V3 et la V4 ne sont que des variantes de la V2.

Bon globalement, la V1 a des informations qui sont stockées à la fin du
fichier MP3 sur les 125 derniers octets. La taille de chaque champ est
fixe, et il y a un nombre prédéfini de champs.

Par contre dans la V2, les informations sont stockées en début de
fichier. Le nombre de champs n'est pas connus d'avance, et la taille
des champs non plus. On trouve bien sur toute ces informations dans
l'entete du fichier.

Pour reperer maintenant à quelle version tu as a faire:

-Les fichiers de la V1 contiennent 128 caracteres avant la fin les trois lettre TAG

-Les fichiers de la V2 quand a eux fons que ton fichier MP3 va commencer avec les trois lettres ID3

Les deux versions peuventy bien sur cohabiter dans un fichier MP3, et
il va s'en dire que comme la longueur des champs est fixe en V1, alors,
elle est bien plus simple à mettre en oeuvre.

Voila, en espérant d'avoir un peu aidé, bonne chance!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
1 sept. 2005 à 11:34
Merci beaucoup pour toutes ces précisions fortes utiles!
0
Rejoignez-nous