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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| 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 |
Partager