Start / Tipps / VB 5/6-Tipp 0483: ID3V1 Tags lesen und schreiben
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


VB 5/6-Tipp 0483: ID3V1 Tags lesen und schreiben


Ganz ohne Hilfe von APIs oder Controls sondern nur mit einem Modul werden ID3V1 Tags von MP3 Dateien gelesen und geschrieben.

Schwierigkeitsgrad 2 Verwendete API-Aufrufe:
keine
Download des Beispielprojektes Download des Beispielprojektes [2,97 KB]
'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'-------------- Anfang Projektdatei MP3Tag.vbp --------------
' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (COMDLG32.OCX)' wird benötigt.
' Es muss ein Verweis auf 'Microsoft Scripting Runtime' gesetzt werden.

'-------- Anfang Formular "frmTAG" alias frmTAG.frm  --------
' Steuerelement: Standarddialog-Steuerelement "cdLoad"
' Steuerelement: Schaltfläche "cmdLoad"
' Steuerelement: Textfeld "txtGenere"
' Steuerelement: Textfeld "txtYear"
' Steuerelement: Textfeld "txtArtist"
' Steuerelement: Textfeld "txtComment"
' Steuerelement: Textfeld "txtAlbum"
' Steuerelement: Textfeld "txtTitle"
' Steuerelement: Schaltfläche "cmdSave"
' Steuerelement: Beschriftungsfeld "Label1"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "lblPath"
Option Explicit

Private Path As String

Private Sub cmdLoad_Click()
    Dim T As TagInfo
    cdLoad.ShowOpen
    Path = cdLoad.FileName
    If GET_ID3V1TAG(Path, T) Then
        txtAlbum.Text = T.album
        txtArtist.Text = T.artist
        txtComment.Text = T.comment
        txtGenere.Text = T.genre
        txtTitle.Text = T.Songname
        txtYear.Text = T.year
                 
    Else
        txtAlbum.Text = ""
        txtArtist.Text = ""
        txtComment.Text = ""
        txtGenere.Text = ""
        txtTitle.Text = ""
        txtYear.Text = ""
        MsgBox "Kein ID3v1 Tag gefunden", vbInformation, "Info"
    End If
End Sub

Private Sub cmdSave_Click()
    Dim T As TagInfo
    T.album = txtAlbum.Text
    T.artist = txtArtist.Text
    T.comment = txtComment.Text
    T.genre = txtGenere.Text
    T.Songname = txtTitle.Text
    T.year = txtYear.Text
    If Not PUT_ID3V1TAG(Path, T) Then MsgBox "Fehler: Konnte keinen ID3v2 Tag schreiben", _
        vbCritical, "Fehler"
End Sub

Private Sub Form_Load()
    cdLoad.Filter = "MP3-Dateien (*.mp3)|*.mp3"
End Sub
'--------- Ende Formular "frmTAG" alias frmTAG.frm  ---------
'---------- Anfang Modul "mdlMP3" alias mdlMP3.bas ----------
'© by TEKER 2002

Option Explicit

Public Type TagInfo
  TAG As String * 3
  Songname As String * 30
  artist As String * 30
  album As String * 30
  year As String * 4
  comment As String * 30
  genre As String * 1
End Type

Public Path$, WINAMPPATH$

Public Function GET_ID3V1TAG(FilePath$, TAG As TagInfo) As Boolean
    Dim FNum%, fso As New FileSystemObject
    On Error Goto ERRORS
    
    If Not fso.FileExists(FilePath) Then
        GET_ID3V1TAG = False
        Exit Function
    End If
    With TAG
        FNum = FreeFile
        Open FilePath For Binary As #FNum
        Get #FNum, LOF(FNum) - 127, .TAG
        If .TAG <> "TAG" Then
            GET_ID3V1TAG = False
            Close #FNum
            Exit Function
        End If
        Get #FNum, , .Songname
        Get #FNum, , .artist
        Get #FNum, , .album
        Get #FNum, , .year
        Get #FNum, , .comment
        Get #FNum, , .genre
        Close #FNum
        GET_ID3V1TAG = True
    End With

    Exit Function
ERRORS:
    GET_ID3V1TAG = False
    Close #FNum
End Function

Public Function PUT_ID3V1TAG(FilePath$, TAG As TagInfo) As Boolean
    Dim FNum%, TPos&
    On Error Goto ERRORS
    
    With TAG
        FNum = FreeFile
        Open FilePath For Binary As #FNum
        TPos = LOF(FNum)
        Get #FNum, TPos - 127, .TAG
        If .TAG = "TAG" Then TPos = TPos - 127
        .TAG = "TAG"
        Put #FNum, TPos, TAG
        Close #FNum
        PUT_ID3V1TAG = True
    End With

    Exit Function
ERRORS:
    PUT_ID3V1TAG = False
End Function

'----------- Ende Modul "mdlMP3" alias mdlMP3.bas -----------
'--------------- Ende Projektdatei MP3Tag.vbp ---------------
Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?
Ja, funktioniert! Windows-Version:
Nein, funktioniert nicht bei mir! VB-Version:

Ihre Meinung

Falls Sie Fragen zu oder Erfahrungen mit diesem Tipp haben, dann sollten Sie diese hier posten. Für alles weitere melden Sie sich bitte in einem zum Thema passendem Forum.

Falls Sie in ihren Kommentar Quellcode einbinden wollen, verwenden Sie bitte Pseudotags: Quellcode für VB5/VB6 wird durch ein vorangestelltes [code] markiert und durch [/code] abgeschlossen.

Ihr Name:   
Ihre E-Mailadresse:   
 
Bitte folgende Kontrollnummer eingeben: 513
Kontrolle:   
 
Ihre Frage/Ihr Kommentar:
Ja, ich möchte weitere Beiträge per E-Mail erhalten
Von Horst Brand am 05.05.2005 um 17:43
Hallo,

was muß ich im Code für ID3V2-Tags ändern?
Anscheinend operiert mein GFlash-MP3-Player mit ID3V2.

Schönen Gruß
Horst Brand
Von Kyrwalda am 01.05.2004 um 11:56
Leider funktioniert es nicht wie ich es mir vorstelle.

Das Problem ist, es wird nur der TAG beschrieben und nicht der Header (dieser wird für alle Player genutzt, um Titel und Interpret anzeigen zu lassen). Es funktioniert nur wenn der Header nicht beschrieben worden ist. Steht dort schon etwas drin, wird dieser nicht mehr überschrieben.
Hat da jemand vielleicht noch eine Idee?????
Von Junkx am 20.10.2002 um 21:58
hier wird das problem des tracks in verbindung mit dem comment nicht beachtet

wer probleme mit dem track hat beim id3v1.1 tag hat soll sich ma hier umschaun:

http://www.scram.de/musik/sonstige/hilfe/wasist/id3tag.htm

da steht das wenn ein track angegeben ist, im 29. byte des comment quasi eine vorwarnung steht und im 30. byte des comments dann statt dem comment die tracknummer steht...

mit dem genre hatte ich nie probleme, wenn eine passende liste vorhanden ist welcher ascii code welches genre verschlüsselt (hab mir das ausm winamp rausgesucht)... nur nr 032 (classical) funzt nit... :/

bai
Von Kyron am 14.06.2002 um 02:02
Funktioniert ganz gut was die leichten Sachen angeht, aber auch hier wieder das Problem mit dem "Genre"!!
Das auslesen des Genres funktioniert nicht, das schreiben ist auch fehlerhaft. z.B. Statt "Pop" wird dann "Folk" geschrieben.
Hat die mp3 einen ID3v1 und einen ID3v2 Tag funktioniert das schreiben der Tags überhaupt nicht.

Erstellt: 15.06.2003
Aktualisierung: 15.06.2003
  Autor: TEKER
E-Mail: Tipps@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.