Hier mein Code Teil 2
Private Function MP3_ReadID3v2Tag(ByVal sFile As String) As ID3v2
Dim oInfo As ID3v2
Dim nTagLen As Integer = MP3_ID3v2Exists(sFile)
If nTagLen > 0 Then
Try
' Datei öffnen
Dim oStream As New System.IO.FileStream(sFile, IO.FileMode.Open)
' Start-Position
Dim nPos As Integer = 10
Dim sFrame As String = ""
Dim sData As String = ""
Dim bData() As Byte
' Liest den Framtyp so lange aus bis es nichts
' mehr zum lesen gibt
Do While nPos < nTagLen
ReDim bData(3)
oStream.Seek(nPos, IO.SeekOrigin.Begin)
oStream.Read(bData, 0, 4)
sFrame = System.Text.Encoding.Default.GetString(bData)
If sFrame.Contains(Chr(0)) Then GoTo close
oStream.Read(bData, 0, 4)
sData = ""
For z As Integer = 2 To 0 Step -1
For i As Integer = 0 To 7
sData &= CStr(Math.Abs(bData(z) And (2 ^ i)))
Next i
Next z
' Frametyp-Größe berechnen
Dim nSize As Long = 0
For i As Integer = 8 To 30
nSize += ((2 ^ i) * Val(sData.Substring(i - 8, 1)))
Next i
nSize += bData(3)
' ID3v2-Info auslesen
ReDim bData(nSize - 1)
nPos += 10
oStream.Seek(nPos + 1, IO.SeekOrigin.Begin)
If nSize > 0 Then
oStream.Read(bData, 0, nSize - 1)
Else
oStream.Read(bData, 0, nSize)
End If
sData = TrimNull(System.Text.Encoding.Default.GetString( _
bData))
' Struktur füllen
With oInfo
Select Case sFrame
Case "TMED"
.sMedium = sData
Case "TLEN"
.sLen = sData
Case "TRCK"
.sTrack = sData
Case "TENC"
.sEncodeBy = sData
Case "WXXX"
.sURL = sData
Case "TCOP"
.sCopyright = sData
Case "TOPE"
.sOrgArtist = sData
Case "TCOM"
.sComposer = sData
Case "COMM"
.sComment = sData
Case "TCON"
' evtl. vorhandene Klammern entfernen
sData = Replace(sData, "(", "")
sData = Replace(sData, ")", "")
.sGenre = sData
Case "TYER"
.sYear = sData
Case "TALB"
.sAlbum = sData
Case "TPE1"
.sArtist = sData
Case "TIT2"
.sTitle = sData
End Select
End With
nPos += nSize
Loop
' Datei wieder schließen
close: oStream.Close()
Catch ex As Exception
End Try
End If
Return (oInfo)
End Function
' Entfernt alle Null-Zeichen im String
Private Function TrimNull(ByVal sData As String) As String
Return sData.Replace(Chr(0), "").TrimEnd
End Function |