Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 240733 (2169)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Audio und Mp3-CD's auslesen
Puma
| Datum:09.10.02 23:02 (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 (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 (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 (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 (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 (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