Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE MP3 (TAGS, IMAGE)


Information sur la source

Catégorie :Multimedia Source .NET ( DotNet ) Classé sous : mp3, idtag, musique Niveau : Débutant Date de création : 22/09/2005 Date de mise à jour : 26/02/2006 17:48:39 Vu : 14 071

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Cette classe permet de:
- lire les tags mp3 (v1 uniquement)
- récupérer sur fnac.com l'image correspondant (en fonction des tags)
 

Source

  • Imports System.IO
  • Imports System.Net
  • <Serializable()> Public Class cls_mp3tag
  • Public path As String
  • Public directory As String
  • Public filename As String
  • Public artist As String
  • Public title As String
  • Public album As String
  • Public genre As String = 255
  • Public comments As String
  • Public track As String
  • Public tagged As Boolean
  • Public num As Integer
  • ' Genres
  • Public Enum enum_genres As Byte
  • Blues = 0
  • ClassicRock = 1
  • Country = 2
  • Dance = 3
  • Disco = 4
  • Funk = 5
  • Grunge = 6
  • HipHop = 7
  • Jazz = 8
  • Metal = 9
  • NewAge = 10
  • Oldies = 11
  • Other = 12
  • Pop = 13
  • RnB = 14
  • Rap = 15
  • Reggae = 16
  • Rock = 17
  • Techno = 18
  • Industrial = 19
  • Alternative = 20
  • Ska = 21
  • DeathMetal = 22
  • Pranks = 23
  • Soundtrack = 24
  • EuroTechno = 25
  • Ambient = 26
  • TripHop = 27
  • Vocal = 28
  • JazzFunk = 29
  • Fusion = 30
  • Trance = 31
  • Classical = 32
  • Instrumental = 33
  • Acid = 34
  • House = 35
  • Game = 36
  • SoundClip = 37
  • Gospel = 38
  • Noise = 39
  • AlternRock = 40
  • Bass = 41
  • Soul = 42
  • Punk = 43
  • Space = 44
  • Meditative = 45
  • InstrumentalPop = 46
  • InstrumentalRock = 47
  • Ethnic = 48
  • Gothic = 49
  • Darkwave = 50
  • TechnoIndustrial = 51
  • Electronic = 52
  • PopFolk = 53
  • Eurodance = 54
  • Dream = 55
  • SouthernRock = 56
  • Comedy = 57
  • Cult = 58
  • Gangsta = 59
  • Top40 = 60
  • ChristianRap = 61
  • PopFunk = 62
  • Jungle = 63
  • NativeAmerican = 64
  • Cabaret = 65
  • NewWave = 66
  • Psychadelic = 67
  • Rave = 68
  • Showtunes = 69
  • Trailer = 70
  • LoFi = 71
  • Tribal = 72
  • AcidPunk = 73
  • AcidJazz = 74
  • Polka = 75
  • Retro = 76
  • Musical = 77
  • RocknRoll = 78
  • HardRock = 79
  • None = 255
  • End Enum
  • '******************************************************************************
  • 'recup les infos a partir des tags
  • Public Sub init(ByVal e_path As String)
  • Me.path = e_path
  • Try
  • Me.filename = Me.path.Substring(Me.path.LastIndexOf("\") + 1)
  • Me.title = Me.filename
  • Me.directory = Me.path.Substring(0, Me.path.LastIndexOf("\") + 1)
  • Dim Buffer(128) As Byte
  • Dim StreamReadWrite As System.IO.FileStream
  • Dim Encodeur As New System.Text.ASCIIEncoding
  • Try
  • StreamReadWrite = New System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)
  • Catch ex As Exception
  • Exit Sub
  • End Try
  • Dim TagID3 As String
  • StreamReadWrite.Seek(-128, System.IO.SeekOrigin.End)
  • StreamReadWrite.Read(Buffer, 0, 128)
  • TagID3 = Encodeur.GetString(Buffer)
  • 'Recherche du Tag TAG
  • If TagID3.Substring(0, 3).Equals("TAG") Then
  • 'Initialisation de Title
  • Me.title = TagID3.Substring(3, 30).Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
  • 'Initialisation de Author
  • Me.artist = TagID3.Substring(33, 30).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
  • 'Initialisation de Album
  • Me.album = TagID3.Substring(63, 30).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
  • 'Initialisation de Comments
  • Me.comments = TagID3.Substring(97, 28).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
  • 'Analyse du caractère 125 de TagID3
  • If TagID3.Chars(125).Equals(0) Then
  • 'Initialisation de Track
  • Me.track = Buffer.GetValue(126)
  • 'Initialisation de Tagged
  • Me.tagged = False
  • Else
  • 'Initialisation de Track
  • Me.track = 0
  • 'Initialisation de Category
  • Me.genre = Buffer.GetValue(127)
  • If Me.genre = "" Or Me.genre = " " Then
  • Me.genre = "255"
  • End If
  • If Me.title = "" Then Me.title = Me.filename
  • 'Initialisation de Tagged
  • Me.tagged = True
  • 'ferme le fichier
  • StreamReadWrite.Close()
  • End If
  • End If
  • Catch IOex As System.IO.IOException
  • End Try
  • 'si ya pas de title, on met le nom du fichier
  • If Me.title = "" Then Me.title = Me.filename
  • 'si ya pas d'artiste, on met le nom du dossier
  • If IsNothing(Me.artist) OrElse Me.artist.Length = 0 Then Me.artist = "Inconnu"
  • End Sub
  • '******************************************************************************
  • 'recup l'image sur le site de la fnac :p
  • Public Function get_picture(ByRef e_http As cls_http) As Image
  • Try
  • 'envoi du formulaire avec les infos
  • Dim requete_http As String
  • Dim response_http As String
  • requete_http = "http://www3.fnac.com/search/quick.do?text=" & Me.artist & " " & Me.title & " " & Me.album & "+&category=audio"
  • response_http = e_http.get_url(requete_http)
  • 'recup le lien pour l'image
  • Dim pos_debut As Integer = response_http.IndexOf("http://multimedia.fnac.com/multimedia/images_produits/petites")
  • Dim pos_Fin As Integer = response_http.IndexOf("""", pos_debut)
  • Dim url_img As String = response_http.Substring(pos_debut, pos_Fin - pos_debut)
  • url_img = url_img.Replace("petites", "grandes")
  • Debug.WriteLine(url_img)
  • 'enregistre l'image dans un fichier
  • Return e_http.get_picture(url_img)
  • Catch ex As Exception
  • Debug.WriteLine("Erreur lors de la récupération de l'image: " & ex.Message)
  • Return Nothing
  • End Try
  • End Function
  • End Class
Imports System.IO
Imports System.Net

<Serializable()> Public Class cls_mp3tag

    Public path As String
    Public directory As String
    Public filename As String
    Public artist As String
    Public title As String
    Public album As String
    Public genre As String = 255
    Public comments As String
    Public track As String
    Public tagged As Boolean
    Public num As Integer

    ' Genres
    Public Enum enum_genres As Byte
        Blues = 0
        ClassicRock = 1
        Country = 2
        Dance = 3
        Disco = 4
        Funk = 5
        Grunge = 6
        HipHop = 7
        Jazz = 8
        Metal = 9
        NewAge = 10
        Oldies = 11
        Other = 12
        Pop = 13
        RnB = 14
        Rap = 15
        Reggae = 16
        Rock = 17
        Techno = 18
        Industrial = 19
        Alternative = 20
        Ska = 21
        DeathMetal = 22
        Pranks = 23
        Soundtrack = 24
        EuroTechno = 25
        Ambient = 26
        TripHop = 27
        Vocal = 28
        JazzFunk = 29
        Fusion = 30
        Trance = 31
        Classical = 32
        Instrumental = 33
        Acid = 34
        House = 35
        Game = 36
        SoundClip = 37
        Gospel = 38
        Noise = 39
        AlternRock = 40
        Bass = 41
        Soul = 42
        Punk = 43
        Space = 44
        Meditative = 45
        InstrumentalPop = 46
        InstrumentalRock = 47
        Ethnic = 48
        Gothic = 49
        Darkwave = 50
        TechnoIndustrial = 51
        Electronic = 52
        PopFolk = 53
        Eurodance = 54
        Dream = 55
        SouthernRock = 56
        Comedy = 57
        Cult = 58
        Gangsta = 59
        Top40 = 60
        ChristianRap = 61
        PopFunk = 62
        Jungle = 63
        NativeAmerican = 64
        Cabaret = 65
        NewWave = 66
        Psychadelic = 67
        Rave = 68
        Showtunes = 69
        Trailer = 70
        LoFi = 71
        Tribal = 72
        AcidPunk = 73
        AcidJazz = 74
        Polka = 75
        Retro = 76
        Musical = 77
        RocknRoll = 78
        HardRock = 79
        None = 255
    End Enum

    '******************************************************************************
    'recup les infos a partir des tags
    Public Sub init(ByVal e_path As String)

        Me.path = e_path

        Try

            Me.filename = Me.path.Substring(Me.path.LastIndexOf("\") + 1)
            Me.title = Me.filename
            Me.directory = Me.path.Substring(0, Me.path.LastIndexOf("\") + 1)

            Dim Buffer(128) As Byte
            Dim StreamReadWrite As System.IO.FileStream
            Dim Encodeur As New System.Text.ASCIIEncoding
            Try
                StreamReadWrite = New System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)
            Catch ex As Exception
                Exit Sub
            End Try

            Dim TagID3 As String
            StreamReadWrite.Seek(-128, System.IO.SeekOrigin.End)
            StreamReadWrite.Read(Buffer, 0, 128)
            TagID3 = Encodeur.GetString(Buffer)
            'Recherche du Tag TAG
            If TagID3.Substring(0, 3).Equals("TAG") Then
                'Initialisation de Title
                Me.title = TagID3.Substring(3, 30).Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
                'Initialisation de Author
                Me.artist = TagID3.Substring(33, 30).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
                'Initialisation de Album
                Me.album = TagID3.Substring(63, 30).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
                'Initialisation de Comments
                Me.comments = TagID3.Substring(97, 28).Trim.Trim.Replace(Chr(0), "").Trim(CChar(vbNullChar))
                'Analyse du caractère 125 de TagID3
                If TagID3.Chars(125).Equals(0) Then
                    'Initialisation de Track
                    Me.track = Buffer.GetValue(126)
                    'Initialisation de Tagged
                    Me.tagged = False
                Else
                    'Initialisation de Track
                    Me.track = 0
                    'Initialisation de Category
                    Me.genre = Buffer.GetValue(127)
                    If Me.genre = "" Or Me.genre = " " Then
                        Me.genre = "255"
                    End If
                    If Me.title = "" Then Me.title = Me.filename
                    'Initialisation de Tagged
                    Me.tagged = True

                    'ferme le fichier
                    StreamReadWrite.Close()

                End If
            End If
        Catch IOex As System.IO.IOException

        End Try


        'si ya pas de title, on met le nom du fichier
        If Me.title = "" Then Me.title = Me.filename

        'si ya pas d'artiste, on met le nom du dossier 
        If IsNothing(Me.artist) OrElse Me.artist.Length = 0 Then Me.artist = "Inconnu"

    End Sub

    '******************************************************************************
    'recup l'image sur le site de la fnac :p
    Public Function get_picture(ByRef e_http As cls_http) As Image
        Try
            'envoi du formulaire avec les infos
            Dim requete_http As String
            Dim response_http As String
            requete_http = "http://www3.fnac.com/search/quick.do?text=" & Me.artist & " " & Me.title & " " & Me.album & "+&category=audio"
            response_http = e_http.get_url(requete_http)

            'recup le lien pour l'image
            Dim pos_debut As Integer = response_http.IndexOf("http://multimedia.fnac.com/multimedia/images_produits/petites")
            Dim pos_Fin As Integer = response_http.IndexOf("""", pos_debut)
            Dim url_img As String = response_http.Substring(pos_debut, pos_Fin - pos_debut)
            url_img = url_img.Replace("petites", "grandes")
            Debug.WriteLine(url_img)

            'enregistre l'image dans un fichier
            Return e_http.get_picture(url_img)

        Catch ex As Exception
            Debug.WriteLine("Erreur lors de la récupération de l'image: " & ex.Message)
            Return Nothing
        End Try

    End Function

End Class

Conclusion

C'est un version beta, ya surement plein de bugs mais bon... (titou ma déja permis d'en resoudre :)
Autrement je voudrais remercier HVb pour son code sur la recup du source html d'une page web (http://www.vbfrance.com/code.aspx?id=5938) et de téléchargement de fichiers (http://www.vbfrance.com/code.aspx?id=6109)

Pour l'utiliser:
dim mp3 as new cls_mp3tag()
mp3.init(le_chemin_de_votre_mp3)
mp3.num = 1   'il doivent avoir un no, moi c'est la clé de ma base access
mp3.get_picture(le_dossier_dans_lequel_vous_voulez_l_enregistrer)
'affiche dans un picturebox
picturebox1.image=image.fromfile(mp3.img_path)
'affiche les tags dans un textbox
textbox1.text = mp3.artist & " - " & mp3.title & " - " & mp3.album

Enjoy :)

 

Historique

26 février 2006 17:48:39 :
Prise en compte des remarques de titou !

Commentaires et avis

signaler à un administrateur
Commentaire de Titou4u le 23/02/2006 23:53:34

excellent, c'est ce que je cherchais.
EN Vb.net, peu de sources proposent une classe claire et bien commentée.
Dommage qu'elle ne recupère pas les tad v2.
Pour moi, ca mérite un bon 9/10 et je m'enpresse de mettre ta classe dans mon projet...

signaler à un administrateur
Commentaire de hvb le 25/02/2006 15:24:21

merci de me citer, c'est correct. N'ayant lu l'explication finale qu'en dernier, j'ai failli raler... ^^'x

signaler à un administrateur
Commentaire de Titou4u le 25/02/2006 16:34:04

Bon, en fait, j'ai trouvé qualques soucis sur ton codes:
-Le 1er qui n'est pas des moindres est que tu ouvre un fichier en lecture, mais que tu as oublié de le refermer a la fin. Donc a la fin de ton sub init, aprés le end try, place ca "StreamReadWrite.Close()"

-2nd point, dans ta fonction init, tu recupére des données (par exemple pour le titre du morceau), mais tu n'enléve pas les caractères nuls que cette valeur contient, du coup, si tu essaie de concatener auteur et titre dans une variable string, ca ne marche pas. moi dans mon code, j'ai mis:
Me.title = TagID3.Substring(3, 30).Trim
Me.title = Me.title.Trim(CChar(vbNullChar))

-3éme point, tu n'as pas mis option strict, du coup, j'ai eu queqlques warning de conversion from string to char, mais ca, c'est moins important...

sinon, ca marche impec, j'en suis bien content :o)
continue comme ca
TiToU

signaler à un administrateur
Commentaire de olixelle le 26/02/2006 17:47:29

coucou titou4u,

merci pour tes remarques, j'ai un peu honte en fait sur le nom fermage du stream :)
sinon pour les null j'avais mis ca: TagID3.Substring(97, 28).Trim.Trim.Replace(Chr(0), "")
je sais pas si ca fé la mm chose que ton trim...

si tu fé des améliorations donne les moi, je mettrai le source a jour !

a+

signaler à un administrateur
Commentaire de Titou4u le 26/02/2006 18:01:58

toutes mes excuses, j'avais pas vu le code posté, .Trim.Replace(Chr(0), "") fait la même chose que mon code, mais en ouvrant le zip, je n'avais pas ca. C'est moi qui ai honte d'avoir mis sur 2 lignes ce qui marche en une, donc pas besoin de rajouter .Trim(CChar(vbNullChar)) a la fin... :p

Dés que j'aurais le temps, je t'enveirais le fichier avec les corrections de convertions.

Je vais aussi essayer de trouver comment recuperer les tag v2 (même si pour mon projet je n'en ai pas spécialement besoin) et je tenterais de modifier ta classe pour qu'ele puisse recuperer,les tag v1 , v2 ou les 2...

signaler à un administrateur
Commentaire de olixelle le 26/02/2006 18:08:17

mdr,
je viens de modifier le code en prenant en compte tes remarques :)
ya osi un pb de caractere (style les é qui sont remplacés par un i .... c un pb d'unicode ca devrait pas etre compliqué a modifer :p

signaler à un administrateur
Commentaire de Karpett le 26/04/2006 17:26:51

Il y a un soucis dans la source de la recup d'image sur fnac.com
La classe cls_http n'est pas déclarée

signaler à un administrateur
Commentaire de inconnu974 le 06/09/2006 20:01:00

Source tres utile et bien commentée mais comme pour KARPETT, la classe cls_http n'est pas déclaréee (cela dit je m'en sers pas)
Dommage les concepts objets sont quelque peu oubliés (constructeurs, encapsulation) mais comme la source est de niveau débutant je vote 7/10

signaler à un administrateur
Commentaire de olixelle le 06/09/2006 20:20:09

Bonjour Inconnu,

effectivement c 2 concepts poo ne sont pas implémentés mais pour une bonne raison:
cette source fait partie d'un média center (www.mydomotix.com) et j'ai rajouté les méthodes init & finish qui sont appelées des que l'initialisation d'un module est demandée (sachant que cette classe est static chez moi :)

voila (jvoulé mdéfendre un peu :)

Olixelle

signaler à un administrateur
Commentaire de Hummer29 le 19/09/2007 15:01:59

Bonjour,

En voyant ce code, il est vrai qu'il est pas mal. Je voudrais demander si quelqu'un est intéressé par le développement d'une application permettant de gérer plusieurs types de médias(MP3, DVD, Divx).

Je voudrais développer cette application sur le web et ce, afin que tous le monde puisse avoir cette base de données à sa disposition même s'il n'a pas fait de backup de son disque dur.A l'heure actuelle (si je ne me trompe pas) il n'existe que des applications sur Windows mais pas en Web. Si toutefois cela existe, please envoyer moi le lien pour que j'aille voir si cela correspond à ce que je veux faire.

Je suis donc à la recherche de développeurs qui m'aideraient dans cette tache, si cela intéresse quelqu'un, please contactez-moi sur xmahieu@gmail.com

Merci d'avance

Hummer29

signaler à un administrateur
Commentaire de olixelle le 19/09/2007 19:03:01

bonjour,

j'ai fait cette source il y a assez loongtemps et ca m'a donné l'idée de développer une application Media center
Le résultat est domotix: www.mydomotix.com

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

VB6 lire mp3 [ par DarkFel ] Bonjour alors voilà j'ai parcourt le site en faisant des recherches et j'ai vu pleins de trucs pour lire un fichier mp3. N'étant pas très doué j'ai pa commande pour integrer un fichier mp3 dans un projet vb.net 2005 [ par hamzatsdi1A ] salut a tous bon je suis entrain de developper une application de location de voiture , je veux bien integrer une chanson mais je n'arrive pas a le fa Conversion fichier Wave vers MP3 en VB? [ par nabilG ] Quelqu'un aurait-il essayé de convertir un fichier WAVE enregistré en fichier MP3 en utilisant le VB6 ou VB.NET?J'ai trouvé des exemples d'enregistrem stéganographie MP3/4 [ par kalif ] bonjour, es ce qu'il y a quelqu'un qui sais comment faire de la stéganographie dans un fichier mp3 ou mp4, c'est a dire cacher un fichier (de n'import Convertir .WAV en .MP3 [ par Supersnifeur ] Hello,J'aimerais savoir si quelqu'un peut me passer un script pour la convertion de l'extension .wav en .mp3 .Je galere depuis au moins une semaine po VB6 - Lire mp3 en boucle avec MMControl [ par Airel35 ] Bonjour,Tout est dans le titre. En fait sur chaque form j'ai un son différent, mais l'utilisateur peut rester sur ce form des heures s'il le souhaite, Insérer du Texte dans un DataGrid: Lecteur MP3 [ par xboxnissan ] Bonjour a tous et a toute,Peut-être le thème ne se situe pas la,J'ai une question à vous poser.Ça fais près de 1 semaine aujourd'hui que je cherche un Dir [ par mr404 ] Bonjour à tousJe suis en vb6 j'utilise une fonction random pour un lecteur multimedia et j'utilise la fonction Dir&amp;un morceau du code :       Trac Gérer les sorties audio [ par scorpion 3180 ] Bonjour à tous,Je développe pour l'entreprise où j'effectue mon stage une application qui devra lire differants fichiers mp3 en même temps et sur diff Vu Meter [ par rejean ] Bonjour a tous, je suis nouveau en programation Visual Basic 6. C'est ma deuxieme demande d'aide sur ce forum. Cette fois ci c'est au suget de capture


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.