Hi all!
I have trouble to translate the VisualBasic-Source into
Purebasic-Code. I never used VB.
Can someone help me, to get this code in PB?
Code: Select all
Private Sub cmdOpen_Click()
Dim MP3FileName$, Mp3FileNumber, Mp3FileContent$
Dim ID3Position As Long, ID3Length$, lngID3Length As Long
Dim ID3Version$, ID3V2Tag$
On Error Resume Next
'Öffnen-Dialog
lstID3V2Info.Clear
File.DefaultExt = ".MP3"
File.DialogTitle = "MP3 öffnen"
File.Filter = "MP3-Dateien|*.MP3"
File.ShowOpen
If Dir$(File.filename) "" Then
lblStatus.Caption = "MP3 öffnen..."
MP3FileName$ = File.filename
Mp3FileNumber = FreeFile
'MP3 einlesen...
Open MP3FileName$ For Binary As Mp3FileNumber
lblStatus.Caption = "Bitte warten, lese MP3 ein..."
Mp3FileContent$ = String$(LOF(Mp3FileNumber), "!")
Get Mp3FileNumber, , Mp3FileContent$
Close Mp3FileNumber
'ID3V2-Tag suchen
lblStatus.Caption = "Bitte warten, suche ID3V2-Tag"
ID3Position = InStr(Mp3FileContent$, "ID3")
If ID3Position = 0 Then
lblStatus.Caption = "Kein ID3V2-Tag vorhanden"
Exit Sub
End If
'Tag gefunden, weiter gehts!
lblStatus.Caption = "ID3V2-Tag gefunden!"
ID3Version$ = Mid$(Mp3FileContent$, ID3Position + 3, 2)
'Versionkontrolle
If Asc(Left$(ID3Version$, 1)) 2 And _
Asc(Left$(ID3Version$, 1)) 3 And _
Asc(Left$(ID3Version$, 1)) 4 Then
lblStatus.Caption = "Falsche Version! (" + _
Trim$(Str$(Asc(Left$(ID3Version$, _
1)))) + ")"
Exit Sub
End If
'Version anzeigen
lstID3V2Info.AddItem "ID3V2-Version:" + _
Str$(Asc(Left$(ID3Version$, 1))) + "." + _
Trim$(Str$(Asc(Right$(ID3Version$, 1))))
'Länge bestimmen
ID3Length$ = Mid$(Mp3FileContent$, ID3Position + 6, 4)
lngID3Length = 256 * 8 * 8 * Asc(Left$(ID3Length$, 1)) + _
256 * 8 * Asc(Mid$(ID3Length$, 2, 1)) + _
256 * Asc(Mid$(ID3Length$, 3, 1)) + _
Asc(Mid$(ID3Length$, 4, 1))
lstID3V2Info.AddItem "Länge des ID3V2-Tags:" + _
Str$(lngID3Length) + " Byte"
ID3V2Tag$ = Mid$(Mp3FileContent$, ID3Position, _
lngID3Length + 10)
Mp3FileContent$ = ""
'Nach Extended Header suchen...
If Asc(Mid$(ID3V2Tag$, 6, 1)) Or 4 = True Then
lstID3V2Info.AddItem "Extended Header gefunden"
ID3V2Tag$ = Mid$(ID3V2Tag$, 10)
End If
ID3V2Tag$ = Mid$(ID3V2Tag$, 11)
'Nun Frame für Frame abarbeiten...
Dim FrameName$
Dim FrameLen$, lngFrameLen
Dim FrameFlags$, Frame$
Do
'ID3V2.3
If Asc(Left$(ID3Version$, 1)) = 3 Or _
Asc(Left$(ID3Version$, 1)) = 4 Then
'Frame-Header auslesen
FrameName$ = Left$(ID3V2Tag$, 4)
'Wenn es sich um den Footer handelt, dann sind wir
'fertig!
If Left$(FrameName$, 3) = "3DI" Then Exit Do
FrameLen$ = Mid$(ID3V2Tag$, 5, 4)
lngFrameLen = 256 * 8 * 8 * Asc(Left$(FrameLen$, 1)) _
+ 256 * 8 * Asc(Mid$(FrameLen$, 2, 1)) _
+ 256 * Asc(Mid$(FrameLen$, 3, 1)) + _
Asc(Mid$(FrameLen$, 4, 1))
FrameFlags$ = Mid$(ID3V2Tag$, 9, 2)
ID3V2Tag$ = Mid$(ID3V2Tag$, 11)
'Frame-Content bestimmen
Select Case FrameName$
Case "PCNT": Frame$ = "Play Counter:"
Case "TRCK": Frame$ = "Track:"
Case "TENC": Frame$ = "Encoded von:"
Case "WXXX": Frame$ = "Link:"
Case "TCOP": Frame$ = "Copyright (c):"
Case "TOPE": Frame$ = "Ursprünglicher Künstler:"
Case "TCOM": Frame$ = "Composer:"
Case "TCON": Frame$ = "Genre:"
Case "COMM": Frame$ = "Kommentar:"
Case "TYER": Frame$ = "Jahr:"
Case "TALB": Frame$ = "Album:"
Case "TPE1": Frame$ = "Künstler:"
Case "TIT2": Frame$ = "Titel:"
Case "TLAN": Frame$ = "Sprache:"
Case "TLEN": Frame$ = "Länge:"
Case "TMED": Frame$ = "Medientyp:"
Case "TPUB": Frame$ = "Publisher:"
Case "TSSE": Frame$ = "Decoding-Software:"
Case Else: Frame$ = "Unbekanntes Frame(" + _
FrameName$ + "):"
End Select
If Left$(ID3V2Tag$, 1) = Chr$(0) Then
lstID3V2Info.AddItem Frame$ + " " + _
Mid$(ID3V2Tag$, 2, _
lngFrameLen - 1)
Else
lstID3V2Info.AddItem Frame$ + " " + _
Left$(ID3V2Tag$, _
lngFrameLen)
End If
ID3V2Tag$ = Mid$(ID3V2Tag$, lngFrameLen + 1)
'ID3V2.2
ElseIf Asc(Left$(ID3Version$, 1)) = 2 Then
'Frame-Header auslesen
FrameName$ = Left$(ID3V2Tag$, 3)
'Wenn es sich um den Footer handelt, dann sind wir
'fertig!
If FrameName$ = "3DI" Then Exit Do
FrameLen$ = Mid$(ID3V2Tag$, 4, 3)
lngFrameLen = 256 * 8 * Asc(Left$(FrameLen$, 1)) + _
256 * Asc(Mid$(FrameLen$, 2, 1)) + _
Asc(Mid$(FrameLen$, 3, 1))
ID3V2Tag$ = Mid$(ID3V2Tag$, 7)
'Frame-Content bestimmen
Select Case FrameName$
Case "TRK": Frame$ = "Track:"
Case "TEN": Frame$ = "Encoded von:"
Case "TCR": Frame$ = "Copyright (c):"
Case "TOA": Frame$ = "Ursprünglicher Künstler:"
Case "TCM": Frame$ = "Composer:"
Case "TCO": Frame$ = "Genre:"
Case "COM": Frame$ = "Kommentar:"
Case "TYE": Frame$ = "Jahr:"
Case "TAL": Frame$ = "Album:"
Case "TP1": Frame$ = "Künstler:"
Case "TT2": Frame$ = "Titel:"
Case "TLA": Frame$ = "Sprache:"
Case "TMT": Frame$ = "Medientyp:"
Case "TSS": Frame$ = "Decoding-Software:"
Case Else: Frame$ = "Unbekanntes Frame(" + _
FrameName$ + "):"
End Select
If Left$(ID3V2Tag$, 1) = Chr$(0) Then
lstID3V2Info.AddItem Frame$ + " " + _
Mid$(ID3V2Tag$, _
2, lngFrameLen - 1)
Else
lstID3V2Info.AddItem Frame$ + " " + _
Left$(ID3V2Tag$, _
lngFrameLen)
End If
ID3V2Tag$ = Mid$(ID3V2Tag$, lngFrameLen + 1)
End If
Loop Until Len(ID3V2Tag$) = 0
lblStatus.Caption = "Bereit!"
End If
End Subses
