WinFuture-Forum.de: Id-tag - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Id-tag VB -> C++


#1 Mitglied ist offline   gewup 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 08. März 06
  • Reputation: 0

geschrieben 28. Juni 2006 - 09:10

Hi Leute

ich möchte gern den ID-Tag von Mp3s auslesen
ich habe auch etwas in VB gefunden, da ich fast kein VB kann, sondern nur C++ wäre dies unnütz!
Finde aber nichts brauchbares in C++!!!!!!
könnte mir jemand helfen, und mir vielleicht erklären, wie das funktioniert, damit ich dies übersertzen kann!!

' MP3-Informationen (ID3v1)
Private Type ID3v1
  TAG As String * 3	   ' TAG
  Title As String * 30	' Titel des Liedes
  Artist As String * 30   ' Interpret
  Album As String * 30	' Album
  Year  As String * 4	 ' Erscheinungsjahr
  Comments As String * 30 ' Kommentar
  Genre As Byte		   ' Indexnummer des Genres
End Type

Dies ist relativ einfach, ist nur ein Struct und das habe ich auch, ist nur zum verständnis des folgenden Codes begefügt!!


' MP3-Infos auslesen
Private Function MP3_ReadID3v1(ByVal sFIle As String) As ID3v1
  Dim F As Integer
  Dim UDT_MP3 As ID3v1
  
  F = FreeFile
  Open sFIle For Binary As #F
  Seek #F, LOF(F) - Len(UDT_MP3) + 1
  Get #F, , UDT_MP3
  Close #F
  
  If UDT_MP3.TAG = "TAG" Then
	' "TAG" vorhanden?
	MP3_ReadID3v1 = UDT_MP3
  End If
End Function


Wäre echt um jede Antwort dankbar!!

thx gruß gewup
0

Anzeige



#2 Mitglied ist offline   2Black 

  • Gruppe: aktive Mitglieder
  • Beiträge: 473
  • Beigetreten: 09. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Aalen

geschrieben 28. Juni 2006 - 13:49

Ich versteh von C++ leider nicht viel, kann dir also nur indirekt helfen. Versuche aber den Code einwenig zu erläutern.

Private Function MP3_ReadID3v1(ByVal sFIle As String) As ID3v1

Beginn der Funktion. Es muss der Dateiname übergeben werden und man erhält als Ergebnis den Tag in Form der Struct.



Dim F As Integer
Dim UDT_MP3 As ID3v1

Definiert die Variablen F (Integer) und UDT_MP3 (Struct)



F = FreeFile

Weist der Variable F die nächst verfügbare Dateinummer zu



Open sFIle For Binary As #F
Öffnet die Datei im Binären Modus



Seek #F, LOF(F) - Len(UDT_MP3) + 1



Der Tag befindet sich ganz am Ende der MP3-Datei:

00338b10h: 00 00 00 00 00 00 00 00 00 00 54 41 47 54 69 74 ; ..........TAGTit
00338b20h: 6C 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; le..............
00338b30h: 00 00 00 00 00 00 00 00 00 00 00 41 72 74 69 73 ; ...........Artis
00338b40h: 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; t...............
00338b50h: 00 00 00 00 00 00 00 00 00 41 6C 62 75 6D 00 00 ; .........Album..
00338b60h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00338b70h: 00 00 00 00 00 00 00 32 30 30 36 43 6F 6D 6D 65 ; .......2006Comme
00338b80h: 6E 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; nt..............
00338b90h: 00 00 00 00 00 00 00 00 00 03 ; ..........


Das sind die letzten Bytes einer MP3-Datei. Der rot markierte Bereich ist der Tag, der sich in Form der Struct wiederspiegeln wird. Der Befehl (Seek #F, LOF(F) - Len(UDT_MP3) + 1) geht nun an's der Datei, Minus die Länge des Tags (bzw. Länge der Struct (Len(UDT_MP3)). Man ist dann am Beginn des rot markiertem Bereiches.


Get #F, , UDT_MP3

Dieser Befehl liest den oben markierten Bereich aus der MP3-Datei heraus und schreibt diese in die Variable UDT_MP3 (Struct).


Close #F

Schleißt die Datei

If UDT_MP3.TAG = "TAG" Then
' "TAG" vorhanden?
MP3_ReadID3v1 = UDT_MP3
End If


Prüft, ob der Tag überhaupt in der MP3-Datei vorhanden ist. Prüft dazu die ersten 3 Bytes an der Stelle, an der sich der Tag befinden müsste. Enthalten diese 3 Bytes den Wert "TAG", dann ist der Tag vorhanden. Anschließend wird das Ergebnis zurückgegeben, ansonsten bleibt die Rückgabe der Funktion leer.



End Function
Schließt die Funktion ab






Ich hoffe ich konnt das jetzt irgendwie ein wenig erklären. Bei Fragen frag ruhig :D

Dieser Beitrag wurde von 2Black bearbeitet: 28. Juni 2006 - 13:52

0

#3 Mitglied ist offline   gewup 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 08. März 06
  • Reputation: 0

geschrieben 29. Juni 2006 - 15:31

Hi

erst mal ganz dickes fettes Danke!!!!!

Mal jemand, der nicht nur einen Link postet und hoft, dass sich zwei zeilen Code ganz von selbst erklären!

sieht aber komplizierter aus, als ich gedacht habe!!
muss ich gleich mal ausprobieren

Vielen Dank

gruß gewup
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0