hab hier gerade was gefunden ist nen Code von NicTheQuick aus dem alten Board:
Code: Alles auswählen
Structure MP3Info
FileSize.l
MilliSecs.l
Bitrate.l ; wenn negativ, dann variable Bitrate (negierter Durchschnitt)
Frequency.l
nFrames.l ; MPEG-Frames
EndStructure
Structure MP3
Info.MP3Info
ID3v1_Track.l
ID3v1_Title.s
ID3v1_Artist.s
ID3v1_Album.s
ID3v1_Year.l
ID3v1_Genre.l
ID3v1_Comment.s
ID3v2_Track.l
ID3v2_Title.s
ID3v2_Artist.s
ID3v2_Album.s
ID3v2_Year.l
ID3v2_Genre.s
ID3v2_Comment.s
ID3v2_Composer.s
ID3v2_OrigArtist.s
ID3v2_Copyright.s
ID3v2_URL.s
ID3v2_EncodedBy.s
ID3v2_Encoder.s
ID3v2_PlayCounter.s
ID3v2_Language.s
ID3v2_Length.s
ID3v2_Mediatyp.s
ID3v2_Publisher.s
EndStructure
Dim Genre.s(147)
Procedure InitGenre()
Protected a.l
Restore Genre
For a = 0 To 146
Read Genre(a)
Next
DataSection
Genre:
Data.s "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal"
Data.s "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial"
Data.s "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk"
Data.s "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise"
Data.s "AlternRock", "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic"
Data.s "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta"
Data.s "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes"
Data.s "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock"
Data.s "Folk", "Folk-Rock", "National Folk", "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass"
Data.s "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic"
Data.s "Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove"
Data.s "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle"
Data.s "Duet", "Punk Rock", "Drum Solo", "Acapella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", "Club-House", "Hardcore", "Terror", "indie", "Brit Pop", "Negerpunk"
Data.s "Polsk Punk", "Beat", "Christian Gangsta Rap", "Heavy Metal", "Black Metal", "Crossover", "Comteporary Christian"
Data.s "Christian Rock", "Merengue", "Salsa", "Trash Metal", "Anime", "JPop", "Synth Pop"
EndDataSection
EndProcedure
Procedure.s ReadStringL(Length.l) ;Read the string with the given length from the current file
Protected String.s
String = Space(Length)
ReadData(@String, Length)
ProcedureReturn String
EndProcedure
#MP3File_ID = 0
Procedure GetMP3Information(File.s, *MP3Information.MP3)
Protected ID3Size.l, Byte.l, Size.l, FrameSize.l, Version.l
If ReadFile(#MP3File_ID, File)
GetMP3Info(File, @*MP3Information\Info)
FileSeek(Lof() - 128) ;ID3v1-Tag
If ReadStringL(3) = "TAG"
*MP3Information\ID3v1_Title = ReadStringL(30)
*MP3Information\ID3v1_Artist = ReadStringL(30)
*MP3Information\ID3v1_Album = ReadStringL(30)
*MP3Information\ID3v1_Year = Val(ReadStringL(4))
*MP3Information\ID3v1_Comment = ReadStringL(29)
*MP3Information\ID3v1_Track = ReadByte() & $FF
*MP3Information\ID3v1_Genre = ReadByte() & $FF
EndIf
FileSeek(0) ;ID3v2-Tag
If ReadStringL(3) = "ID3"
Version = ReadByte()
If Version = 2 Or Version = 3 Or Version = 4
ReadWord()
ID3Size = 0
For Byte = 3 To 0 Step -1
ID3Size + (ReadByte() << (7 * Byte))
Next
Size = 0
Repeat
; get frames until no more
FrameID.s = ReadStringL(4)
If PeekB(@FrameID) = 0
Break
EndIf
; get frame size
FrameSize = 0
For Byte = 3 To 0 Step -1
FrameSize + (ReadByte() << (7 * Byte))
Next
; add frame size to total size
Size + FrameSize
; skip flag and language bytes
ReadWord()
ReadByte()
; get frame contents
; subtract one for language byte
FrameSize - 1
;Contents.s = ReadStringL(FrameSize)
; put frame contents into structure
Select FrameID
Case "TALB"
*MP3Information\ID3v2_Album = ReadStringL(FrameSize)
Case "TCOM"
*MP3Information\ID3v2_Composer = ReadStringL(FrameSize)
Case "TCON"
*MP3Information\ID3v2_Genre = ReadStringL(FrameSize)
Case "TCOP"
*MP3Information\ID3v2_Copyright = ReadStringL(FrameSize)
Case "TENC"
*MP3Information\ID3v2_EncodedBy = ReadStringL(FrameSize)
Case "TIT2"
*MP3Information\ID3v2_Title = ReadStringL(FrameSize)
Case "TOPE"
*MP3Information\ID3v2_OrigArtist = ReadStringL(FrameSize)
Case "TPE1"
*MP3Information\ID3v2_Artist = ReadStringL(FrameSize)
Case "TRCK"
*MP3Information\ID3v2_Track = Val(ReadStringL(FrameSize))
Case "TSSE"
*MP3Information\ID3v2_Encoder = ReadStringL(FrameSize)
Case "TYER"
*MP3Information\ID3v2_Year = Val(ReadStringL(FrameSize))
Case "COMM" ;Macht Winamp Fehler? Führende Sprachmarkierung: "eng" + Chr(0)...
ReadLong()
*MP3Information\ID3v2_Comment = ReadStringL(FrameSize - 4)
Case "WXXX" ;Macht Winamp Fehler? Führendes Chr(0)...
ReadByte()
*MP3Information\ID3v2_URL = ReadStringL(FrameSize - 1)
Case "TPUB"
*MP3Information\ID3v2_Publisher = ReadStringL(FrameSize)
Case "TMED"
*MP3Information\ID3v2_Mediatyp = ReadStringL(FrameSize)
Case "TLEN"
*MP3Information\ID3v2_Length = ReadStringL(FrameSize)
Case "TLAN"
*MP3Information\ID3v2_Language = ReadStringL(FrameSize)
Case "PCNT"
*MP3Information\ID3v2_PlayCounter = ReadStringL(FrameSize)
EndSelect
Until Size >= ID3Size
EndIf
EndIf
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
MP3File.s = OpenFileRequester("Chose a MP3-File...", "", "MP3-Dateien (*.mp3)|*.mp3|Alle Dateien (*.*)|*.*", 0)
If MP3File
InitGenre()
Info.MP3
If OpenWindow(0, 0, 0, 320, 400, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "MP3-Information")
If CreateGadgetList(WindowID())
TreeGadget(0, 0, 0, 320, 400, #PB_Tree_AlwaysShowSelection)
If GetMP3Information(MP3File, @Info)
AddGadgetItem(0, -1, "Infos about File: " + MP3File)
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "Format")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "FileSize: " + Str(Info\Info\FileSize))
AddGadgetItem(0, -1, "Length: " + Str(Info\Info\MilliSecs) + " ms (" + Str(Info\Info\MilliSecs / 60000) + ":" + Str(Info\Info\MilliSecs / 1000) + ")")
If Info\Info\Bitrate >= 0
AddGadgetItem(0, -1, "Bitrate: " + Str(Info\Info\Bitrate) + " bps")
Else
AddGadgetItem(0, -1, "Bitrate: variable (Average Bitrate: " + Str(-Info\Info\Bitrate) + " bps)")
EndIf
AddGadgetItem(0, -1, "Frequency: " + Str(Info\Info\Frequency) + " Hz")
AddGadgetItem(0, -1, "MPEG Frames: " + Str(Info\Info\nFrames))
CloseTreeGadgetNode(0)
AddGadgetItem(0, -1, "ID3v1-Tag")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "Track: " + Str(Info\ID3v1_Track))
AddGadgetItem(0, -1, "Title: " + Info\ID3v1_Title)
AddGadgetItem(0, -1, "Artist: " + Info\ID3v1_Artist)
AddGadgetItem(0, -1, "Album: " + Info\ID3v1_Album)
AddGadgetItem(0, -1, "Year: " + Str(Info\ID3v1_Year))
AddGadgetItem(0, -1, "Genre: " + Genre(Info\ID3v1_Genre))
AddGadgetItem(0, -1, "Comment: " + Info\ID3v1_Comment)
CloseTreeGadgetNode(0)
AddGadgetItem(0, -1, "ID3v2_Tag")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "Track: " + Str(Info\ID3v2_Track))
AddGadgetItem(0, -1, "Title: " + Info\ID3v2_Title)
AddGadgetItem(0, -1, "Artist: " + Info\ID3v2_Artist)
AddGadgetItem(0, -1, "Album: " + Info\ID3v2_Album)
AddGadgetItem(0, -1, "Year: " + Str(Info\ID3v2_Year))
AddGadgetItem(0, -1, "Genre: " + Info\ID3v2_Genre)
AddGadgetItem(0, -1, "Comment: " + Info\ID3v2_Comment)
AddGadgetItem(0, -1, "Composer: " + Info\ID3v2_Composer)
AddGadgetItem(0, -1, "Original Artist: " + Info\ID3v2_OrigArtist)
AddGadgetItem(0, -1, "Copyright: " + Info\ID3v2_Copyright)
AddGadgetItem(0, -1, "URL: " + Info\ID3v2_URL)
AddGadgetItem(0, -1, "Encoded by: " + Info\ID3v2_EncodedBy)
AddGadgetItem(0, -1, "Encoder: " + Info\ID3v2_Encoder)
AddGadgetItem(0, -1, "Play Counter: " + Info\ID3v2_PlayCounter)
AddGadgetItem(0, -1, "Language: " + Info\ID3v2_Language)
AddGadgetItem(0, -1, "Length: " + Info\ID3v2_Length)
AddGadgetItem(0, -1, "Mediatyp: " + Info\ID3v2_Mediatyp)
AddGadgetItem(0, -1, "Publisher: " + Info\ID3v2_Publisher)
CloseTreeGadgetNode(0)
CloseTreeGadgetNode(0)
Else
AddGadgetItem(0, -1, "Wrong file type!")
EndIf
Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
EndIf
EndIf
EndIf
Ps: ich such noch nen platform unabhängigen code für Vorbiscomments hat wer sowas?