Wie man die ID3v1-Tag einer MP3-Datei ausliest, haben wir in den Tipps & Tricks bereits abgehandelt. Was jetzt noch fehtl, ist das Auslesen der erweiterten Informationen - sprich ID3v2-Tags. Ob eine MP3-Datei über diese erweiterten Infos verfügt, prüfen Sie über MP3_ID3v2Exist. Die Funktion gibt entweder den Wert 0 zurück (keine ID3v2-Infos vorhanden) oder die ein Wert größer 0, der dann die Länge des ID3v2-Tags entspricht. Diese Länge ist wichtig für das Auslesen der Informationen! Hinweis: Fügen Sie nachfolgenden Code bitte in ein Modul ein: Option Explicit ' ID3v2-Infostruktur Public Type ID3v2 sTitle As String sArtist As String sAlbum As String sComment As String sYear As String sGenre As String sComposer As String sURL As String sOrgArtist As String sCopyright As String sEncodeBy As String sTrack As String sMedium As String sLen As String End Type ' Prüfen, ob eine MP3-Datei über ID3v2-Infos verfügt ' Rückgabewert: Länge des ID3v2-Tags Public Function MP3_ID3v2Exists( _ ByVal sFile As String) As Long Dim sText As String Dim sBin As String Dim sID3 As String * 3 Dim i As Integer Dim z As Integer Dim b(4) As Byte Dim F As Integer Dim nID3v2Size As Long ' Datei öffnen On Error GoTo ErrHandler F = FreeFile Open sFile For Binary As #F Get #F, 1, sID3 If sID3 <> "ID3" Then MP3_ID3v2Exists = 0 Close #F Exit Function End If ' Größe des ID3v2-Tags ermitteln Get #F, 7, b(4) Get #F, 8, b(3) Get #F, 9, b(2) Get #F, 10, b(1) sBin = "" For z = 2 To 4 For i = 0 To 6 sBin = sBin & CStr(Abs(b(z) And (2 ^ i))) Next i Next z nID3v2Size = 0 For i = 7 To 27 nID3v2Size = nID3v2Size + ((2 ^ i) * _ Val(Mid(sBin, i - 6, 1))) Next i nID3v2Size = nID3v2Size + b(1) + 10 MP3_ID3v2Exists = nID3v2Size Close #F Exit Function ErrHandler: If F > 0 Then Close #F MP3_ID3v2Exists = 0 End Function ' ID3v2-Infos auslesen Public Function MP3_ReadID3v2Tag( _ ByVal sFile As String, _ ByVal nID3v2Size As Long) As ID3v2 Dim nPos As Long Dim sFrameType As String * 4 Dim sText As String Dim sBin As String Dim sID3 As String * 3 Dim i As Integer Dim z As Integer Dim b(4) As Byte Dim F As Integer Dim nSize As Long On Error GoTo ErrHandler ' Datei öffnen F = FreeFile Open sFile For Binary As #F ' Start-Position nPos = 11 ' Liest den Framtyp so lange aus bis es nichts ' mehr zum lesen gibt Do While nPos < nID3v2Size ' der eingelesene Framtyp Get #F, nPos, sFrameType If InStr(sFrameType, Chr$(0)) > 0 Then ' Fertig nichts mehr zum lesen Close #F Exit Do End If nPos = nPos + 4 Get #F, nPos, b(4) ' FrameTyp Größe Get #F, nPos + 1, b(3) ' FrameTyp Größe Get #F, nPos + 2, b(2) ' FrameTyp Größe Get #F, nPos + 3, b(1) ' FrameTyp Größe nPos = nPos + 5 sBin = "" For z = 2 To 4 For i = 0 To 7 Step 1 sBin = sBin & CStr(Abs(b(z) And (2 ^ i))) Next i Next z ' Framtyp-Größe ausrechnen nSize = 0 For i = 8 To 30 nSize = nSize + ((2 ^ i) * Val(Mid$(sBin, i - 7, 1))) Next i nSize = nSize + b(1) ' ID3v2-Info sText = String$(nSize, vbNullChar) nPos = nPos + 1 Get #F, nPos, sText sText = TrimNullChar(sText) With MP3_ReadID3v2Tag Select Case sFrameType Case "TMED" .sMedium = sText Case "TLEN" .sLen = sText Case "TRCK" .sTrack = sText Case "TENC" .sEncodeBy = sText Case "WXXX" .sURL = sText Case "TCOP" .sCopyright = sText Case "TOPE" .sOrgArtist = sText Case "TCOM" .sComposer = sText Case "COMM" .sComment = sText Case "TCON" ' evtl. vorhandene Klammern entfernen sText = Replace(sText, "(", "") sText = Replace(sText, ")", "") .sGenre = sText Case "TYER" .sYear = sText Case "TALB" .sAlbum = sText Case "TPE1" .sArtist = sText Case "TIT2" .sTitle = sText End Select nPos = nPos + nSize End With Loop ErrHandler: Close #F End Function ' Hilfsfunktion, um Null-Zeichen und überflüssige ' Leerzeichen zu entfernen Private Function TrimNullChar( _ ByVal sString As String) As String sString = Replace(sString, vbNullChar, "") TrimNullChar = Trim$(sString) End Function Beispiel für den Aufruf: Dim sFile As String Dim uID3v2 As ID3v2 Dim nSize As Long ' MP3-Datei sFile = App.Path & "\mySong.mp3" ' Existieren ID3v2-Infos? nSize = MP3_ID3v2Exists(sFile) If nSize > 0 Then ' ID3v2-Infos auslesen und anzeigen uID3v2 = MP3_ReadID3v2Tag(sFile) With uID3v2 Text1.Text = "Titel: " & .sTitle & vbCrLf & _ "Interpret: " & .sArtist & vbCrLf & _ "Album: " & .sAlbum & vbCrLf & _ "Track: " & .sTrack & vbCrLf & _ "Länge: " & .sLen & vbCrLf & _ "Medium: " & sMedium & vbCrLf End With Else MsgBox "Keine ID3v2-Infos vorhanden!" End If Dieser Tipp wurde bereits 32.312 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |