Mp3 Tag lesen [Erledigt]

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Mp3 Tag lesen [Erledigt]

Beitrag von stevie »

Hallo,
hat eigentlich schon mal jemand, was geschrieben, um Titel, Künstler und so weiter aus nem MP3-File mit id3v2 zu lesen.
So richtig versteh ich das noch nicht.
Zuletzt geändert von stevie am So, 06. Sep 2009 23:16, insgesamt 1-mal geändert.
Viele Grüße
Stevie
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mp3 Tag lesen

Beitrag von AUGE_OHR »

stevie hat geschrieben:hat eigentlich schon mal jemand, was geschrieben, um Titel, Künstler und so weiter aus nem MP3-File mit id3v2 zu lesen.
ID3v2 habe ich nicht, denn das war mir "so" zu kompliziert. hier erstmal die ID3v1 Version die schon einiges hergibt.

Code: Alles auswählen

FUNCTION IDTAGINFO(cFile,aReturn)

LOCAL nHandle
LOCAL nBytes  := - 128
LOCAL cBuffer := SPACE(128)
LOCAL RETVAR  := .F.

   nHandle := FOPEN(ConvToAnsiCP(cFile),FO_READ+FO_SHARED)

   IF FERROR() <> 0
      MSGBOX("Fehler beim öffnen der Datei:"+cFile,FERROR())
      RETURN (RETVAR)
   ENDIF

   FSEEK(nHandle,0,FS_END)
   FSEEK(nHandle,nBytes,FS_RELATIVE)
   FREAD(nHandle,@cBuffer,128)

   IF SUBSTR(cBuffer,1,3) = "TAG"
      aReturn[ 6 ] := SUBSTR(cBuffer,128,1)
      cBuffer      := ConvToOemCP(cBuffer)
      aReturn[ 1 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,4,30),CHR(0),""))
      aReturn[ 2 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,34,30),CHR(0),""))
      aReturn[ 3 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,64,30),CHR(0),""))
      aReturn[ 4 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,94,4),CHR(0),""))
      aReturn[ 5 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,98,30),CHR(0),""))
      RETVAR       := .T.
   ENDIF
   FCLOSE(nHandle)

RETURN (RETVAR)
nun wieder zu ID3v2, dort wird "geschachtelt" .... und es gibt keine "festen" Längen ...
und es können "Bilder" drin sein ... und ...

zum "abspiele" der MP3 Files ja einen "Player". Ich benutze WMP und von "dort" bekomme ich nun die kompletten Informationen.
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Mp3 Tag lesen

Beitrag von stevie »

AUGE_OHR hat geschrieben:
stevie hat geschrieben:hat eigentlich schon mal jemand, was geschrieben, um Titel, Künstler und so weiter aus nem MP3-File mit id3v2 zu lesen.
ID3v2 habe ich nicht, denn das war mir "so" zu kompliziert. hier erstmal die ID3v1 Version die schon einiges hergibt.

Code: Alles auswählen

FUNCTION IDTAGINFO(cFile,aReturn)

LOCAL nHandle
LOCAL nBytes  := - 128
LOCAL cBuffer := SPACE(128)
LOCAL RETVAR  := .F.

   nHandle := FOPEN(ConvToAnsiCP(cFile),FO_READ+FO_SHARED)

   IF FERROR() <> 0
      MSGBOX("Fehler beim öffnen der Datei:"+cFile,FERROR())
      RETURN (RETVAR)
   ENDIF

   FSEEK(nHandle,0,FS_END)
   FSEEK(nHandle,nBytes,FS_RELATIVE)
   FREAD(nHandle,@cBuffer,128)

   IF SUBSTR(cBuffer,1,3) = "TAG"
      aReturn[ 6 ] := SUBSTR(cBuffer,128,1)
      cBuffer      := ConvToOemCP(cBuffer)
      aReturn[ 1 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,4,30),CHR(0),""))
      aReturn[ 2 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,34,30),CHR(0),""))
      aReturn[ 3 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,64,30),CHR(0),""))
      aReturn[ 4 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,94,4),CHR(0),""))
      aReturn[ 5 ] := ALLTRIM(STRTRAN(SUBSTR(cBuffer,98,30),CHR(0),""))
      RETVAR       := .T.
   ENDIF
   FCLOSE(nHandle)

RETURN (RETVAR)
nun wieder zu ID3v2, dort wird "geschachtelt" .... und es gibt keine "festen" Längen ...
und es können "Bilder" drin sein ... und ...

zum "abspiele" der MP3 Files ja einen "Player". Ich benutze WMP und von "dort" bekomme ich nun die kompletten Informationen.
Viele Titel haben Alben mit mehr als 30 Zeichen bei mir. Von daher wäre v2 natürlich besser. Danke erstmal dafür. Die wmp.ocx kann ich bei mir in Vista mit WMP 11 nicht finden. In system32 gibts nur ne Wmp.dll. Von daher weiß ich nicht so recht, wie ich das darüber machen könnte. Mal gucken, ob ich mich doch noch mit dem v2 anfreunden kann.

Achso nochwas: In AReturn[6] steht (halt so ein komisches Zeichen). Wofür steht das?
Viele Grüße
Stevie
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mp3 Tag lesen

Beitrag von AUGE_OHR »

stevie hat geschrieben:Die wmp.ocx kann ich bei mir in Vista mit WMP 11 nicht finden.
ich unter Win7 auch nicht, aber das macht nichts.

Code: Alles auswählen

   bOldError := ERRORBLOCK({| e | BREAK(e)})
   BEGIN SEQUENCE
      oWMP := XbpActiveXControl():new(oAnzeig,,{0,0},aSize,aPP)
      oWMP:CLSID := "{6BF52A52-394A-11D3-B153-00C04F79FAA6}"
      oWMP:create()

   RECOVER USING oError
      IF oError:subCode == 6500
         MsgBox("Error creating ActiveX Control."+CRLF+;
                "Please make sure M$ Mediaplayer 9 Componends"+CRLF+;
                "and WMP.DLL are installed on your computer.",;
                "WMPlayer Sample")
         oWMP := NIL
         QUIT
      ENDIF
   END SEQUENCE
   ERRORBLOCK(bOldError)
stevie hat geschrieben:Achso nochwas: In AReturn[6] steht (halt so ein komisches Zeichen). Wofür steht das?
könnte es CHR(26) sein ?
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Mp3 Tag lesen

Beitrag von stevie »

AUGE_OHR hat geschrieben:
stevie hat geschrieben:Achso nochwas: In AReturn[6] steht (halt so ein komisches Zeichen). Wofür steht das?
könnte es CHR(26) sein ?
Laut Asc() die 15.

PS: Das id3v2-Felder haben ja in fast jeder Datei eine andere Reihenfelder. Habe es schon geschafft den Künstler zu extrahieren.
Viele Grüße
Stevie
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mp3 Tag lesen

Beitrag von AUGE_OHR »

stevie hat geschrieben:
AUGE_OHR hat geschrieben:
stevie hat geschrieben:Achso nochwas: In AReturn[6] steht (halt so ein komisches Zeichen). Wofür steht das?
könnte es CHR(26) sein ?
Laut Asc() die 15.
hm ... keine Ahnung wofür das war ...
stevie hat geschrieben:PS: Das id3v2-Felder haben ja in fast jeder Datei eine andere Reihenfelder.
:) ... ja genau das meinte ich mit "geschachtelt"
stevie hat geschrieben:Habe es schon geschafft den Künstler zu extrahieren.
gut, anbei der Code den ich benutze

Code: Alles auswählen

STATIC PROCEDURE MOREINFO(oWMP,lClear)  // oWMP -> ActiveX  
LOCAL nCount
LOCAL i
LOCAL iMax
LOCAL j
LOCAL jMax
LOCAL oItem
LOCAL cName
LOCAL cValue

   DEFAULT lClear TO .T.
   IF lClear
      oFileInfo:clear()     // my Listbox
   ENDIF

   nCount := oWMP:currentPlaylist:count
   IF nCount > 0
      oItem := oWMP:controls:currentitem()
      jMax  := oItem:attributeCount()
      FOR j := 0 TO jMax - 1
         cName  := oItem:getAttributeName(j)
         cValue := oItem:getItemInfo(cName)
         // add to Listbox 
         oFileInfo:addItem(SUBSTR(cName+SPACE(15),1,15)+CHR(9)+cValue)
      NEXT
   
      oFileInfo:addItem("********** EOF INFO **********")
   ENDIF

RETURN
klar das es nur funktioniert wenn der Song läuft ...
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Mp3 Tag lesen

Beitrag von stevie »

AUGE_OHR hat geschrieben: klar das es nur funktioniert wenn der Song läuft ...
Naja bei 1000 Liedern wirds lustig, wenn ich jede erst abspielen muss.
Viele Grüße
Stevie
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mp3 Tag lesen

Beitrag von AUGE_OHR »

stevie hat geschrieben:
AUGE_OHR hat geschrieben: klar das es nur funktioniert wenn der Song läuft ...
Naja bei 1000 Liedern wirds lustig, wenn ich jede erst abspielen muss.
:headbang:
ne im Ernst, das geht schnell weil wirklich nur anspielen schon genügt und du ja "nur" Audio hast.

Mit Video habe ich einen Video "Cutter" per WMP activeX entwickelt. Wenn du den "Schntt" abspielst
wirst du kaum merken wenn er zur nächsten Markierung "gesprungen" ist. (XP,3 Ghz,P4 HT,ATi9600)

p.s. hast du alle MP3 in "einem" Verzeichniss oder viele Subdirs ? ich habe da eine recursive Such
Routine für *.MP3
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Mp3 Tag lesen

Beitrag von stevie »

AUGE_OHR hat geschrieben:
stevie hat geschrieben:
AUGE_OHR hat geschrieben: klar das es nur funktioniert wenn der Song läuft ...
Naja bei 1000 Liedern wirds lustig, wenn ich jede erst abspielen muss.
:headbang:
ne im Ernst, das geht schnell weil wirklich nur anspielen schon genügt und du ja "nur" Audio hast.

Mit Video habe ich einen Video "Cutter" per WMP activeX entwickelt. Wenn du den "Schntt" abspielst
wirst du kaum merken wenn er zur nächsten Markierung "gesprungen" ist. (XP,3 Ghz,P4 HT,ATi9600)

p.s. hast du alle MP3 in "einem" Verzeichniss oder viele Subdirs ? ich habe da eine recursive Such
Routine für *.MP3
mehrere Ordner, manchmal mit Unterordner, die ich im Endeffekt in die Datenbank aufnehmen und in eine zentrale Ordnerstruktur zusammenholen und zwischen Laptop, PC und externer Festplatte synchron gehalten werden sollen.
Viele Grüße
Stevie
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Re: Mp3 Tag lesen

Beitrag von Gerd König »

Hallo Stevie,

ich verwende die AudioGenie2.dll Version V1.0.5 von Stefan Töngi sowie die ot4xb.dll von Pablo Botella Navarro.
Dabei benutze ich aber ausschließlich nur den Id3V2-Tag. Den Id3V1-Tag habe ich grundsätzlich aus meinen MP3-Files entfernt.

Zur Anpassung an XBase habe ich eine Wrapper-Klasse (Mp3Id3V2ForXb) geschrieben, die zur Zeit folgende Methoden geinhaltet:

init()
Initialisierung der Klasse

peekUnicodeString()
liest den Unicode-String von einer Adresse

analyzeAudioFile()
liest die ID3-Daten aus der MP3-Datei aus
Die Methode stellt alle ID3-Daten im Speicher zur Verfügung. Jeder Aufruf zum Lesen oder Schreiben von Daten basiert dann auf diesem Speicher

isID3V1()
prüft, ob ein ID3V1-Tag vorhanden ist

isID3V2()
prüft ob ein ID3V2-Tag vorhanden ist

saveID3V2()
schreibt alle Änderungen aus dem Speicher in die MP3-Datei zurück

getID3V1Tag()
gibt ein Array mit Interpret, Titel, Genre und Jahr zurück

removeID3V1()
entfernt ID3V1-Tag

getBitRate()
getChannelMode()
getChannels()
getDuration()
getCurrentFile()
getSampleRate()
getAlbum()
getArtist()
getSongTitle()
getYear()
getGenre()
getTrack()
getDefinedDuration()
existPictures()
getTypeOfPicture(nPicture)
getPicture()
removePictures()
existLyrics()
removeLyrics()
existComments()
removeComments()
setAlbum()
setArtist()
setSongTitle()
setYear()
setGenre()
setTrack()
setDefinedDuration()
setPicture()

Die Audiogenie-DLL bietet noch weesentlich mehr Funktionen, die ich aber (noch) nicht implementiert habe.
Bei Bedarf würde ich die Wrapper-Klasse in der Wissensbasis (mit Beispielen) zur Verfügung stellen.

Herzlichst
Gerd
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mp3 Tag lesen

Beitrag von brandelh »

Gerd König hat geschrieben:Die Audiogenie-DLL bietet noch weesentlich mehr Funktionen, die ich aber (noch) nicht implementiert habe.
Bei Bedarf würde ich die Wrapper-Klasse in der Wissensbasis (mit Beispielen) zur Verfügung stellen.

Herzlichst
Gerd
Bedarf habe ich im Moment zwar nicht ... aber interessant wäre das schon ;-)

Was kostet die Audiogenie-DLL ?
Einen passenden Link darauf wäre auch nicht schlecht 8)
Gruß
Hubert
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Re: Mp3 Tag lesen

Beitrag von Gerd König »

Nachtrag:

Hompage: http://www.audiogenie.net
Forum: http://forum.audiogenie.net

Audiogenie ist Freeware mit Popup
Die Freischaltung erfolgt nach einer Spende von mind. 20€
Gerd
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mp3 Tag lesen

Beitrag von AUGE_OHR »

Gerd König hat geschrieben:Hompage: http://www.audiogenie.net
WOW das ist ja ein heisser Tip für ID3 Tags.

Frage : was macht man mit "so vielen" Informationen und welchen "Player" benutzt ihr zum abspielen ?

Einen Video "Mixer" habe ich mir ja mit WMP geschrieben, aber ein Audio "Mixer" steht noch an ...

Frage : hat jemand 2 Sound Karten in seinem PC die er "getrennt" ansteuern kann ? Software ?
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mp3 Tag lesen

Beitrag von georg »

Gerd König hat geschrieben:Hallo Stevie,

ich verwende die AudioGenie2.dll Version V1.0.5 von Stefan Töngi sowie die ot4xb.dll von Pablo Botella Navarro.
Dabei benutze ich aber ausschließlich nur den Id3V2-Tag. Den Id3V1-Tag habe ich grundsätzlich aus meinen MP3-Files entfernt.

...

Die Audiogenie-DLL bietet noch weesentlich mehr Funktionen, die ich aber (noch) nicht implementiert habe.
Bei Bedarf würde ich die Wrapper-Klasse in der Wissensbasis (mit Beispielen) zur Verfügung stellen.

Herzlichst
Gerd
Hallo, Gerd -


bei mir besteht Interesse an dieser Klasse.


Liebe Grüsse aus der Eifel,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Re: Mp3 Tag lesen

Beitrag von Gerd König »

Hallo,

soeben habe ich den Programm-Code der Wrapper-Klasse in der Wissensbasis veröffentlicht.

Jimmy, Du fragst, was man mit so vielen Informationen macht.
Ich habe ca. 2500 mp3-Dateien mit Titeln aus den Jahren 1920 bis heute.
Diese habe ich auf einem Memory-Stick.
An meiner Audio-Anlage habe ich ein Noxon2 angeschlossen worüber ich die Titel vom Stick abspiele.
Um schnell mal eine Playlist zu einem bestimmten Genre oder Zeitraum oder Interpreten usw. zu erstellen, habe ich eine Xbase-Applikation geschrieben, mit der ich Playlisten, die mein Noxon auch versteht, erstellen kann. Um mir die Arbeit zu erleichtern habe ich alle Titel in einer Browsertabelle, die ich nach verschieden Kriterien (z.B. Jahr) sortieren kann. Desweiteren habe ich verschiedene Suchfunktionen eingebaut.

Mein Hardwareplayer zeigt übrigens Titel, Interpret, Album, aktuelle Spielzeit des Titels und wenn vorhanden, die vom User eingetragene Dauer des Titels an.

Gerd
Zuletzt geändert von Gerd König am Mo, 24. Aug 2009 12:56, insgesamt 1-mal geändert.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mp3 Tag lesen

Beitrag von georg »

Danke.

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Mp3 Tag lesen

Beitrag von peternmb »

Gerd König hat geschrieben:Hallo,
soeben habe ich den Programm-Code der Wrapper-Klasse in der Wissensbasis veröffentlicht...
Wieso finde ich das weder in der Wissensbasis noch sonst irgendwo :?:
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mp3 Tag lesen [Erledigt]

Beitrag von georg »

Hallo,


vielleicht weil Du nicht genau genug geschaut hast?

http://www.xbaseforum.de/viewtopic.php?f=16&t=3585


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Mp3 Tag lesen [Erledigt]

Beitrag von peternmb »

georg hat geschrieben:Hallo,


vielleicht weil Du nicht genau genug geschaut hast?

http://www.xbaseforum.de/viewtopic.php?f=16&t=3585


Gruss,

Georg
vielen Dank, muss ich wohl irgendwie übersehen haben :banghead:
Antworten