MP3 ID3.v1 Reader

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

MP3 ID3.v1 Reader

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag 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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten