|
Option Explicit
Private mvarFilename As String Private Type Info sTitle As String sArtist As String sAlbum As String sComment As String sYear As String sGenre As String End Type Private MP3Info As Info Public Property Get Filename() As String Filename = mvarFilename End Property Private Function IsValidFile(ByVal sFilename) As Boolean Dim bOk As Boolean ' verifica che il file esista bOk = CBool(Dir(sFilename, vbHidden) <> "") Dim aExtensions, ext aExtensions = Array(".mp3", ".mp2", ".mp1") Dim bOkayExtension As Boolean bOkayExtension = False If bOk Then For Each ext In aExtensions If InStr(1, sFilename, ext, vbTextCompare) > 0 Then bOkayExtension = True End If Next 'ext End If IsValidFile = bOk And bOkayExtension End Function Public Property Let Filename(ByVal sPassFilename As String) Dim iFreefile As Integer Dim lFilePos As Long Dim sData As String * 128 Dim sGenre() As String 'genere Const sGenreMatrix As String = "Blues|Classic Rock|Country|Dance|Disco|Funk|Grunge|" + _ "Hip-Hop|Jazz|Metal|New Age|Oldies|Other|Pop|R&B|Rap|Reggae|Rock|Techno|" + _ "Industrial|Alternative|Ska|Death Metal|Pranks|Soundtrack|Euro-Techno|" + _ "Ambient|Trip Hop|Vocal|Jazz+Funk|Fusion|Trance|Classical|Instrumental|Acid|" + _ "House|Game|Sound Clip|Gospel|Noise|Alt. Rock|Bass|Soul|Punk|Space|Meditative|" + _ "Instrumental Pop|Instrumental Rock|Ethnic|Gothic|Darkwave|Techno-Industrial|Electronic|" +_ "Pop-Folk|Eurodance|Dream|Southern Rock|Comedy|Cult|Gangsta Rap|Top 40|Christian Rap|" + _ "Pop/Punk|Jungle|Native American|Cabaret|New Wave|Phychedelic|Rave|Showtunes|Trailer|" + _ "Lo-Fi|Tribal|Acid Punk|Acid Jazz|Polka|Retro|Musical|Rock & Roll|Hard Rock|Folk|" + _ "Folk/Rock|National Folk|Swing|Fast-Fusion|Bebob|Latin|Revival|Celtic|Blue Grass|" + _ "Avantegarde|Gothic Rock|Progressive Rock|Psychedelic Rock|Symphonic Rock|Slow Rock|" + _ "Big Band|Chorus|Easy Listening|Acoustic|Humour|Speech|Chanson|Opera|Chamber Music|" + _ "Sonata|Symphony|Booty Bass|Primus|Porn Groove|Satire|Slow Jam|Club|Tango|Samba|Folklore|"+_ "Ballad|power Ballad|Rhythmic Soul|Freestyle|Duet|Punk Rock|DrumSolo|ACapella|EuroHouse|"+ _ "Dance Hall|Goa|Drum&Bass|ClubHouse|Hardcore|Terror|indie|BritPop|Negerpunk|PolskPunk|" + _ "Beat|Christian Gangsta Rap|Heavy Metal|Black Metal|Crossover|Comteporary Christian|" + _ "Christian Rock|Merengue|Salsa|Trash Metal|Anime|JPop|Synth Pop" ' Costrusce l'array Genere (solo VB6+) sGenre = Split(sGenreMatrix, "|") ' Store the filename (for "Get Filename"property) mvarFilename = sPassFilename ' Clear the info variables If Not IsValidFile(sPassFilename) Then' bug fix Exit Property End If MP3Info.sTitle = "" MP3Info.sArtist = "" MP3Info.sAlbum = "" MP3Info.sYear = "" MP3Info.sComment = "" ' Verifica se esiste il file MP3 ' Carica le info dal file MP3 iFreefile = FreeFile lFilePos = FileLen(mvarFilename) - 127 If lFilePos > 0 Then' bug fix Open mvarFilename For Binary As #iFreefile Get #iFreefile, lFilePos, sData Close #iFreefile End If ' Aggorna la variabile info If Left(sData, 3) = "TAG" Then MP3Info.sTitle = Mid(sData, 4, 30) MP3Info.sArtist = Mid(sData, 34, 30) MP3Info.sAlbum = Mid(sData, 64, 30) MP3Info.sYear = Mid(sData, 94, 4) MP3Info.sComment = Mid(sData, 98, 30) Dim lGenre lGenre = Asc(Mid(sData, 128, 1)) If lGenre <= UBound(sGenre) Then MP3Info.sGenre = sGenre(lGenre) Else MP3Info.sGenre = "" End If Else MP3Info = GetInfo(mvarFilename) End If End Property Private Function GetInfo(ByVal sFilename) As Info Dim i As Info GetInfo = i Dim s s = sFilename If InStrRev(s, "\") > 0 Then 'it's a full path s = Mid(s, InStrRev(s, "\") + 1) End If 'drop extension s = Left(s, InStrRev(s, ".", , vbTextCompare) - 1) s = Replace(Trim(s), " ", " ") s = Trim(s) If CountItems(s, " ") < 1 Then i.sTitle = Replace(s, "_", " ") GetInfo = i Exit Function End If s = Trim(Replace(s, "_", " ")) If Left(s, 1) = "(" And CountItems(s, "-") < 3 Then i.sArtist = Mid(s, 2, InStr(s, ")") - 2) s = Trim(Mid(s, InStr(s, ")") + 1)) If Left(s, 1) = "-" Then 'grab title i.sTitle = Trim(Mid(s, 2)) Else 'grab title anyway If InStr(s, "-") > 0 Then i.sAlbum = Mid(s, InStr(s, "-") + 1) i.sTitle = Left(s, InStr(s, "-") - 1) Else i.sTitle = Trim(s) End If End If Else Dim aThings Dim l aThings = Split(s, "- ") For l = 0 To UBound(aThings) If Not IsNumeric(aThings(l)) Then If i.sArtist = "" Then i.sArtist = aThings(l) Else If IsNumeric(aThings(l - 1)) Then ' title If i.sTitle = "" Then i.sTitle = aThings(l) End If ElseIf i.sAlbum = "" Then i.sAlbum = aThings(l) End If End If End If Next ' i End If i.sArtist = Replace(Replace(i.sArtist, "(", ""), ")", "") If Left(s, 1) <> "(" And i.sTitle = "" And (InStr(sFilename, "\") <> _ InStrRev(sFilename, "\")) Then ' recurse GetInfo = GetInfo(FixDir(sFilename)) Else GetInfo = i End If End Function Private Function CountItems(s, sToCount) Dim a a = Split(s, sToCount) If UBound(a) = -1 Then CountItems = 0 Else CountItems = UBound(a) - LBound(a) End If End Function Private Function FixDir(sFullpath) Dim s1, s2 s1 = Trim(Left(sFullpath, InStrRev(sFullpath, "\") - 1)) s2 = Trim(Mid(sFullpath, InStrRev(sFullpath, "\") + 1)) FixDir = s1 & " - " & s2 End Function Public Property Get Title() As String Title = Trim(MP3Info.sTitle) End Property Public Property Get Artist() As String Artist = Trim(MP3Info.sArtist) End Property Public Property Get Genre() As String Genre = Trim(MP3Info.sGenre) End Property Public Property Get Album() As String Album = Trim(MP3Info.sAlbum) End Property Public Property Get Year() As String Year = Trim(MP3Info.sYear) End Property Public Property Get Comment() As String Comment = Trim(MP3Info.sComment) End Property |