acceder aux données meta d'un fichier

cyril_25

XLDnaute Nouveau
Bonjour à tous,

je souhaite pouvoir acceder aux données meta de fichiers multimedia (artiste, album, duree... pour un fichier mp3 ou type d'appareil, resolution.... pour du jpg). Lorsque je selectionne un fichier de ce type depuis vba, j'ai acces à ses données classiques (date d'acces, date de creation, taille....) mais pas aux données qui m'interessent.

Merci

Cyril
 

MichelXld

XLDnaute Barbatruc
Re : acceder aux données meta d'un fichier

bonjour


Pour un mp3, ça dépend du type de données à récupérer.



En utilisant la bibliothèque Windows Média Player :

II-L. Afficher des informations sur la séquence en cours



Pour récupérer les tags ID3V1 :

Code:
Sub Tag_ID3V1()
    Dim Fichier As String, Resultat As String
    Dim Ff As Integer
    
    Ff = FreeFile
    Fichier = "C:\dossier\musique.mp3"
     
    Open Fichier For Binary As Ff
        Get Ff, FileLen(Fichier) - 94, Resultat
    Close Ff
     
    MsgBox Trim$(Resultat)
     
End Sub




Pour récupérer les tags id3v2 :

Code:
Option Explicit

'Source VB6
'http://www.freevbcode.com/ShowCode.asp?ID=2646
'
'adaptée en VBA-Excel le 16.05.2007
'

Public i As Integer
Public strEmptyString As String
Public B As Byte
Public s As String

Public Version As Byte

Sub Test()
    Dim NomFichier As String
    Dim TailleFichier As Long
    Dim NumFich As Integer
    Dim PositionEntete As Long
    Dim Tag2 As String
    Dim R As Double
    NomFichier = "C:\dossier\maMusique.mp3"

    NumFich = FreeFile
    
    Open NomFichier For Binary As #NumFich
    TailleFichier = LOF(NumFich)
        Get #NumFich, 1, B
            
        'If B <> 255 Then '(255: début ID3v2)
            'If B <> 73 Then Exit Sub
        'End If
         
        PositionEntete = 1
        Get #NumFich, 2, B
        If (B < 250 Or B > 251) Then
            'We have an ID3v2 tag
            If B = 68 Then
                Get #NumFich, 3, B
                If B = 51 Then
                    Get #NumFich, 4, Version
                    Get #NumFich, 7, B
                    R = B * 20917152
                    Get #NumFich, 8, B
                    R = R + (B * 16384)
                    Get #NumFich, 9, B
                    R = R + (B * 128)
                    Get #NumFich, 10, B
                    R = R + B
                    
                    If R > TailleFichier Or R > 2147483647 Then Exit Sub
                    
                    Tag2 = Space$(R)
                    Get #NumFich, 11, Tag2
                    PositionEntete = R + 11
                End If
            End If
        Else
            'Pas de tag ID3v2
        End If
        
        GetID3v2Tag1 Tag2 'Pass the Id3v2 TagId to the GetID3v2Tag1 function

End Sub
 

Private Function GetID3v2Tag1(Tag2 As String) As Boolean

'On Error GoTo errorhandler
   Dim TitleField As String
   Dim ArtistField As String
   Dim AlbumField As String
   Dim YearField As String
   Dim GenreField As String
   Dim FieldSize As Long
   Dim SizeOffset As Long
   Dim FieldOffset As Long
   Dim TrackNbr As String
   Dim SituationField As String
   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Determine if the ID3v2 tag is ID3v2.2 or ID3v2.3
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Notes: I haven't tested reading an MP3 file that has a ID3v2.2 tag
   
    Select Case Version
    
        Case 2 'ID3v2.2
        'Set the fieldnames for version 2.0
            TitleField = "TT2"
            ArtistField = "TOA"
            AlbumField = "TAL"
            YearField = "TYE"
            GenreField = "TCO"
            FieldOffset = 7
            SizeOffset = 5
            TrackNbr = "TRCK"
       
        Case 3 'ID3v2.3
        'Set the fieldnames for version 3.0
            TitleField = "TIT2"
            ArtistField = "TPE1"
            AlbumField = "TALB"
            YearField = "TYER"
            GenreField = "TCON"
            TrackNbr = "TRCK"
       
            FieldOffset = 11
            SizeOffset = 7
        Case Else
        'We don't have a valid ID3v2 tag, so bail
            Exit Function
            
    End Select
  
  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract track title
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
   
       i = InStr(Tag2, TitleField)
       If i > 0 Then
          'read the title
          FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
          If Version = 3 Then
             'check for compressed or encrypted field
             B = Asc(Mid$(Tag2, i + 9))
             If (B And 128) = True Or (B And 64) = True Then GoTo ReadAlbum
          End If
          Debug.Print Mid$(Tag2, i + FieldOffset, FieldSize)
       End If
 
      
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract album title
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReadAlbum:
    i = InStr(Tag2, AlbumField)
    If i > 0 Then
       FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
       If Version = 3 Then
          'check for compressed or encrypted field
          B = Asc(Mid$(Tag2, i + 9))
          If (B And 128) = 128 Or (B And 64) = 64 Then GoTo ReadArtist
       End If
       Debug.Print Mid$(Tag2, i + FieldOffset, FieldSize)
     
   End If
 
   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract artist name
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReadArtist:
   i = InStr(Tag2, ArtistField)
   If i > 0 Then
      FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
      If Version = 3 Then
         'check for compressed or encrypted field
         B = Asc(Mid$(Tag2, i + 9))
         If (B And 128) = 128 Or (B And 64) = 64 Then GoTo ReadYear
      End If
      Debug.Print Mid$(Tag2, i + FieldOffset, FieldSize)
   End If
 
  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract year title
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReadYear:
   i = InStr(Tag2, YearField)
   If i > 0 Then
      FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
      If Version = 3 Then
         'check for compressed or encrypted field
         B = Asc(Mid$(Tag2, i + 9))
         If (B And 128) = 128 Or (B And 64) = 64 Then GoTo ReadGenre
      End If
      Debug.Print Mid$(Tag2, i + FieldOffset, FieldSize)
   End If
 
  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract genre
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReadGenre:
   i = InStr(Tag2, GenreField)
   If i > 0 Then
      FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
      
      If Version = 3 Then
         'check for compressed or encrypted field
         B = Asc(Mid$(Tag2, i + 9))
         If (B And 128) = 128 Or (B And 64) = 64 Then GoTo ReadTrackNbr
      End If
      
      s = Mid$(Tag2, i + FieldOffset, FieldSize)
      If Left$(s, 1) = "(" Then
        Debug.Print Val(Mid$(s, 2, 2))
        'cboGenre2.ListIndex = Val(txtGenre.Text) + 1
        
      Else
         'i = InStr(gsGenres, s & Space$(22 - Len(s)))
         Debug.Print i
         
         'cboGenre2.ListIndex = i
         If i > 0 Then
            Debug.Print Int(i / 22)
         End If
      End If
   End If
 
  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Extract track number
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReadTrackNbr:
   i = InStr(Tag2, TrackNbr)
   If i > 0 Then
      FieldSize = Asc(Mid$(Tag2, i + SizeOffset)) - 1
      If Version = 3 Then
         'check for compressed or encrypted field
         B = Asc(Mid$(Tag2, i + 9))
         If (B And 128) = 128 Or (B And 64) = 64 Then GoTo Done
      End If
      Debug.Print Mid$(Tag2, i + FieldOffset, FieldSize)
   End If
   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' We're done looking for ID3v2 info
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Done:
   
   Exit Function
'errorhandler:
   'Err.Clear
   'Resume Next
End Function



Pour les images jpg :

IV-C. Lister les propriétés avancées




bonne journée
michel
Microsoft Excel MVP
 

Discussions similaires

Statistiques des forums

Discussions
312 816
Messages
2 092 359
Membres
105 376
dernier inscrit
lepage