Die Community zu .NET und Classic VB.
Menü

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

 von 

Beschreibung 

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

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [3,1 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 ---------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar 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

Kommentar 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?????

Kommentar 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

Kommentar 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.