Mp3 tag google search cd image

Description

Exemple de code permettant de récupérer des images de CD sur google et de les insérer dans les informations du TAG MP3.
J'ai créé ce code car des applications comme MP3TAG ne permettent pas de traiter des MP3 en rafale.
Ce code utilise des ressources open :
- la class read/write TAG MP3.NET : https://github.com/mono/taglib-sharp 'taglib-sharp-2.0.4.0-windows
- l'API google GimageSearchClient : http://code.google.com/p/google-api-for-dotnet/ 'GoogleSearchAPI_0.3.1
- ResizeImage a été récupéré sur internet

Source / Exemple :


Imports Google.API.Search
Imports TagLib

Module MP3CoverGoogle

    'Objet : Met à jour automatiquement l'image du CD dans le TAG MP3. La recherche prend la première image proposé par google.
    'ATTENTION : Pour que la recherche donne de bon résultat il faut que l'artiste et le titre du MP3 soit déja 
    'renseigné dans le fichier. Utiliser http://www.mp3tag.de/en/ pour éditer les TAG.
    'Date de création 15 aout 2011
    'Version 1.0
    'Auteur : Stéphane PINEAU
    'Utilise la class read/write TAG MP3.NET : https://github.com/mono/taglib-sharp 'taglib-sharp-2.0.4.0-windows
    'Utilise l'API google GimageSearchClient : http://code.google.com/p/google-api-for-dotnet/ 'GoogleSearchAPI_0.3.1
    'Pas de gestion des erreurs

    Public Function MP3CoverInsertImage(ByVal strFileMP3 As String, ByVal blnOverRight As Boolean) As Long
        Dim file As TagLib.File
        Dim strRequete As String
        Dim gimageSearch As New Google.API.Search.GimageSearchClient("http://www.google.fr")
        Dim results As IList(Of Google.API.Search.IImageResult)

        'On ajoute les mots clefs standards
        strRequete = " cd "
        strRequete = strRequete & " cover "

        'Chargement des TAG du MP3 dans la class TagLib
        file = TagLib.File.Create(strFileMP3)
        If blnOverRight Or file.Tag.Pictures.Length = 0 Then
            'On vérifie si il y a déja une image dans le MP3
            If file.Tag.Artists.Length > 0 Then
                strRequete = strRequete & " " & file.Tag.Artists(0).ToString & " " & file.Tag.Title
            Else
                strRequete = strRequete & " " & file.Tag.Title
            End If

            'On lance la recherche sur google
            results = gimageSearch.Search(strRequete, 5, ImageSize.All, "", "", "")

            'On prend le premier résultat, si une erreur de téléchargement est observée
            'alors on prendra la deuxième.
            For Each item As Google.API.Search.IImageResult In results
                If MP3CoverInsertImageFromUrl(strFileMP3, item.Url, blnOverRight) = 0 Then
                    Exit For
                End If
            Next
            results = Nothing
            gimageSearch = Nothing
        End If
        'Pas de gestion des erreurs
        MP3CoverInsertImage = 0
    End Function

    Public Function MP3CoverInsertImageFromUrl(ByVal strFileMP3 As String, ByVal strURLImage As String, ByVal blnOverRight As Boolean) As Long
        Dim file As TagLib.File
        Dim pictures(0) As Picture
        Dim picture As New Picture
        Dim objPictureBox As New PictureBox
        Dim strJPGFile As String

        On Error Resume Next
        Err.Clear()
        'On télécharge l'image de l'URL
        objPictureBox.ImageLocation = strURLImage
        objPictureBox.Load()
        If Err.Number = 0 Then
            'On récupère les informations de TAG du MP3
            file = TagLib.File.Create(strFileMP3)
            'On vérifie si une image est déja présente
            If blnOverRight Or file.Tag.Pictures.Length = 0 Then
                'Génération d'un fichier temporaire de l'image a insérer dans le MP3
                strJPGFile = My.Computer.FileSystem.GetParentPath(My.Computer.FileSystem.GetTempFileName()) & "\" & file.Tag.Title & ".jpg"
                If My.Computer.FileSystem.FileExists(strJPGFile) Then My.Computer.FileSystem.DeleteFile(strJPGFile)
                'On redimmensionne l'image JPG et on la sauve
                If ResizeImage(objPictureBox, 300, 300, strJPGFile) = 0 Then
                    picture = New Picture(strJPGFile)
                    picture.Description = file.Tag.Title
                    pictures(0) = picture
                    file.Tag.Pictures = pictures
                    Err.Clear()
                    file.Save()
                    My.Computer.FileSystem.DeleteFile(strJPGFile)
                    pictures(0) = Nothing
                    picture = Nothing
                    file.Dispose()
                    file = Nothing
                End If
            End If
        Else
            'Erreur de chargement de l'image
            MP3CoverInsertImageFromUrl = 1
        End If
        objPictureBox.Dispose()
        objPictureBox = Nothing
    End Function

    Private Function ResizeImage(ByVal objPicture As PictureBox, ByVal x As Int32, ByVal y As Int32, ByVal strNewFile As String) As Long
        'following code resizes picture to fit

        Dim bm As New Bitmap(objPicture.Image)
        Dim width As Integer = Val(x) 'image width. 
        Dim height As Integer = Val(y) 'image height

        Dim thumb As New Bitmap(width, height)

        Dim g As Graphics = Graphics.FromImage(thumb)

        g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic

        g.DrawImage(bm, New Rectangle(0, 0, width, height), New Rectangle(0, 0, bm.Width, _
bm.Height), GraphicsUnit.Pixel)

        g.Dispose()

        'image path. better to make this dynamic. I am hardcoding a path just for example sake
        thumb.Save(strNewFile, _
System.Drawing.Imaging.ImageFormat.Jpeg) 'can use any image format 

        bm.Dispose()

        thumb.Dispose()
    End Function

End Module

Conclusion :


Cette application peut être très utile. Je vous conseille de l'utiliser avec le produit MP3TAG (http://www.mp3tag.de/en/) pour gérer votre base de fichier MP3.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.