*SNIPPET*
Dim raf As RandomAccessFile
raf.Initialize2(Dir, FileName, True, True)
Dim buffer(128) As Byte
' Get first 10 bytes, which holds the header tag, size and version.
raf.ReadBytes(buffer, 0, 10,0)
strTemp = ConvertBytesToString(buffer,3)
If strTemp.ToUpperCase = "ID3" Then
'it is a proper MP3
' Calculate the size of the ID3 tag from the last 4 bytes of data
Try
raf.ReadBytes(buffer,0,4,raf.CurrentPosition )
Do While buffer(0) <> 0
strTag = ConvertBytesToString(buffer,4)
'Make sure it is a Tag I care about
For i= 1 To intNumTags
If strTag.ToUpperCase = strTags(i-1).ToUpperCase Then
blnIsIrrelevant = False
Exit
End If
Next
If blnIsIrrelevant Then Exit
blnIsIrrelevant = True
If buffer(0) <> 0 Then
' Get 4 bytes for frame size
raf.ReadBytes(buffer, 0, 4, raf.CurrentPosition )
size = (65536 * (buffer(0) * 256 + buffer(1))) + (buffer(2) * 256 + buffer(3))
' Skip padding
raf.ReadBytes(buffer, 0, 3, raf.CurrentPosition )
If size > 0 Then
raf.ReadBytes(bigBuffer, 0, (size-1), raf.CurrentPosition)
strTemp = ConvertBytesToString(bigBuffer,(size-1))
Select strTag.ToUpperCase
Case "TIT2": strTitle = strTemp
Case "TPE1": strArtist = strTemp
End Select
End If
End If
raf.ReadBytes(buffer,0,4,raf.CurrentPosition )
Loop
raf.Close
Catch
raf.Close
End Try
strTemp = strTitle & strTagSeparator & strArtist
Return strTemp
Else
Return "FALSE"
End If
* SNIPPET *
Sub ConvertBytesToString(Buffer() As Byte, MaxLength As Int) As String
For i = 0 To MaxLength - 1
If Buffer(i) = 0 Then Return BytesToString(Buffer, 0, i, "UTF8")
Next
Return BytesToString(Buffer, 0, MaxLength, "UTF8")
End Sub