Seite 1 von 1

MP3 ID3.v1 Reader

Verfasst: 24.04.2009 23:29
von ts-soft
Da die alten Originalcodes inzwischen in der Versenkung des BoardArchivs
verschwunden sind, ich diese sowieso für mein akt. Projekt aufarbeiten
mußte, werde ich das Ergebnis hier mal zur Verfügung stellen. Vielleicht
hat ja noch jemand brauchbare Schnippsel für andere Tag-Formate, dann
kann ich sogar von profitieren :mrgreen:

Code: Alles auswählen

; MP3 ID3.v1 Reader
; basiert auf Code von folgenden Autoren:
; NicTheQuick und J-The-Grey

; Zusammengeführt, modifiziert und für PB 4.30 aktualisiert
; Thomas <ts-soft> Schulz

EnableExplicit

DataSection
  genres:
  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 

Structure MP3Info
  title.s
  artist.s
  album.s
  year.s
  comment.s
  track.s
  genre.s
EndStructure

Procedure MP3_TAG_Reader(file.s, *info.MP3Info)
  Protected i, *mem, FF, result = #False
  Dim genre.s(146)
  
  Restore genres
  For i = 0 To 146 
    Read.s genre(i)
  Next
  
  *mem = AllocateMemory(128)
  If *mem
    FF = ReadFile(#PB_Any, file)
    If FF
      FileSeek(FF, Lof(FF) - 128)
      ReadData(FF, *mem, 128)
      CloseFile(FF)
      If PeekS(*mem, 3, #PB_Ascii) = "TAG"
        With *info
          \title = Trim(PeekS(*mem + 3, 30, #PB_Ascii))
          \artist = Trim(PeekS(*mem + 33, 30, #PB_Ascii))
          \year = Trim(PeekS(*mem + 93, 4, #PB_Ascii))
          \comment = Trim(PeekS(*mem + 97, 29, #PB_Ascii))
          \track = Str(PeekB(*mem + 126))
          If PeekB(*mem + 127) >= 0 And PeekB(*mem + 127) < 147
            \genre = genre(PeekB(*mem + 127))
          EndIf
        EndWith
        result = #True
      EndIf
    EndIf
    FreeMemory(*mem)
  EndIf
  ProcedureReturn result
EndProcedure

Verfasst: 24.04.2009 23:34
von cxAlex
Ich hab im engl. Forum was gefunden für ID3v1 & ID3v2 mit internen Covers & Lyrics, vlt. hilfts dir ja:

http://www.purebasic.fr/english/viewtopic.php?t=31280

Verfasst: 24.04.2009 23:45
von ts-soft
cxAlex hat geschrieben:Ich hab im engl. Forum was gefunden für ID3v1 & ID3v2 mit internen Covers & Lyrics, vlt. hilfts dir ja:

http://www.purebasic.fr/english/viewtopic.php?t=31280
:lol: da hätte ich mir das anpassen ja sparen können, für die v1 Tags hat
er fast dieselbe Procedure wie ich erstellt.

Den Rest muß ich noch auswerten, checken usw., danke für den Tip, hab
ich noch garnicht gesehen gehabt.