Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 240733 (2169)
  Suchen
 Zurück zur Übersicht
 AutorThema: Audio und Mp3-CD's auslesen
Puma
Datum:09.10.02 23:02 Antwortenals Email verschicken (Puma_2304@gmx.de) 


Hallo,

ich habe folgendes Problem:

Ich möchte ein Programm schreiben, womit ich MP3-CDs auslesen kann. D.h. es soll mir den Interpreten, Titlename und wenn möglich die Titelnummer auslesen.
Kann mir irgendwer helfen??
Ich wäre sehr dankbar für Eure Hilfe.

MfG Puma


Heiko Reddingius
Datum:10.10.02 10:23 Antwortenals Email verschicken (webmaster@nvse.de) 


Hi,

zum Thema MP3-Files auslesen ... ich würde folgenden Umweg empfehlen, um zunächst mal an die Dateien heranzukommen: geh' über eine Batchdatei oder über ShellExec dem folgenden Befehl:

dir X:\*.mp3 /s /oN /b > c:\mp3files.txt

Hierbei solltest Du X: durch den Laufwerks- oder ggf. Ordnernamen ersetzen. Damit erzeugst Du eine Liste mit allen MP3-Dateien in allen Unterverzeichnissen (/s), die alphabetisch sortiert ist (/oN) und dazu ohne Headerinformationen etc. angezeigt wird (/b). Das Ergebnis sieht dann untefähr wie folgt aus:

X:\Beatles\John Lennon - Imagine.mp3
X:\Beatles\The Beatles - Yesterday.mp3
X:\Queen\Queen - Bohemian Rhapsody (live).mp3

und so weiter, abhängig von Deinen Dateinamen. Diese Liste mußt Du einlesen und ggf. von den Pfadnamen etc. befreien.

Das Auslesen der ID3-Tags ist zumindest bei Standard-ID3 recht einfach, diese sind immer 128 Bytes lang (bin ich mir zumindest ziemlich sicher). Du mußt also praktisch nur beigehen, die Datei öffnen, den Zeiger auf Position (Dateigröße-128 Bytes) positionieren und dann überprüfen, ob die nächsten drei Zeichen die Folge "ID3" sind (damit wird der ID3-Tag eingeleitet). Das Format ist ähnlich wie dBase mit festen Feldlängen aufgebaut (30 Zeichen?). Ich hab' auf einem anderen Rechner noch ein bißchen Quellcode dafür 'rumliegen, den poste ich heute abend oder morgen mal. Alle hier genannten Zahlen sind nur Richtwerte, ich habe die Details gerade nicht im Kopf.

Gruß
Heiko


Alexander Schoenfeld
Datum:10.10.02 10:38 Antwortenals Email verschicken (alexander.schoenfeld@chronologic.de) 


Hallo,

hier eine Homepage, die Beschreibungen zu diversen Dateiformaten liefert:
http://www.wotsit.org

Gib einfach oben bei der Suche "mp3" ein, was du suchst nennt sich ID3 :)

--
Mit freundlichem Gruss / kind regards,
Alexander Schoenfeld

Email: alexander.schoenfeld@chronologic.de


Eric Eggert
Datum:10.10.02 11:12 Antwortenals Email verschicken (mail@yatil.de) 


Hallo, und hier ein kleiner Beispielcode, welcher Bei ID3.1 funktioniert, ID3.2 ist dynamisch und ich hab mich noch nicht daran versucht.

Declare offset&,size&,test$,genre%,file$,id3tag#,Title$,artist$,cd$,year$,comment$,genre%
  let file$=@loadfile$("MP3-File öffnen:","*.mp3")
  FindFirst$(file$)
  IfNot %IOResult
    Dim id3tag#,128
    Clear id3tag#
    Assign #1,file$
    FileMode 0
    OpenRW #1
    Let size&=GetFileSize(#1)
    Let offset&=Sub(size&,128)
    Seek #1,offset&
    BlockRead(#1,id3tag#,0,128)
    CloseRW #1
    Let test$=Char$(id3tag#,0,3)
    If Equ$(Upper$(test$),"TAG")
      Let title$=Trim$(Char$(id3tag#,3,30))
      Let artist$=Trim$(Char$(id3tag#,33,30))
      Let cd$=Trim$(Char$(id3tag#,63,30))
      Let year$=Trim$(Char$(id3tag#,93,4))
      Let comment$=Trim$(Char$(id3tag#,97,30))
      Let genre%=Byte(id3tag#,127)
      Let title$="Titel:",title$;"\nKünstler:",artist$;"\nAlbum:",cd$;"\nGenre:",genre%;\
      "\nJahr:",year$;"\nKommentar:",comment$
    Else
      MessageBox(Add$("Keine Informationen gefunden:\n",file$),"Hinweis",64)
    EndIf
    Dispose id3tag#
  Else
    MessageBox(Add$(file$,"\nwurde nicht gefunden!"),"Fehler",16)
  EndIf
  MessageBox(title$,"Ergebnis",32)
end


MfG, Eric


Puma
Datum:11.10.02 20:00 Antwortenals Email verschicken (puma_2304@gmx.de) 


Hallo Leute,

danke für Eure Hilfe.
Eric deine Variante ist gut aber ist denn jede MP3 in den Formaten gleich???

MfG Puma


Heiko Reddingius
Datum: 11.10.02 23:36 Antwortenals Email verschicken (webmaster@nvse.de) 


Hi Puma,

der ID3-Tag ist standardisiert und wenn vorhanden in allen Dateien gleich, ja - sofern es sich um ID3v1 handelt.

Hier noch mein Codeschnipsel dazu, wobei der von Eric deutlich eleganter gelöst ist *grins*:

Declare size%,id3$,idpos%,cnt%,exist$
FileMode 0
Assign #1,@LOADFILE$("Datei angeben","*.mp3")
OpenRW #1
let size%=@GetFileSize(#1)
 Print "Größe:    ";size%
let idpos%=@Sub(size%,128)
 Print "Position: ";idpos%
Seek #1,idpos%
let cnt%=0
let exist$=@Add$(exist$,@Chr$(@GetByte(#1)))
let exist$=@Add$(exist$,@Chr$(@GetByte(#1)))
let exist$=@Add$(exist$,@Chr$(@GetByte(#1)))
If Equ$(exist$,"TAG")

WhileNot Equ(cnt%,124)
let ID3$=@Add$(ID3$,@Chr$(@GetByte(#1)))
inc cnt%
WEnd
 print ID3$
@messagebox(id3$,"ID3-Tag",64)
Else
 @messagebox("Kein ID3-Tag vorhanden","sorry ...",64)
EndIf


Gruß
Heiko


 Zurück zur Übersicht