vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB2005, VB200808.07.09
Auslesen, ändern und speichern von ID3v1-Tags

Dieses Beispiel zeigt, wie sich die MP3-Informationen ID3v1 auslesen, ändern und wieder speichern lassen - einschließlich Genre.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  14.598 
www.tools4vb.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Vor längerer Zeit hatten wir in einem Tipp gezeigt, wie sich MP3-Informationen (ID3v1) auslesen lassen:
 MP3-Informationen auslesen (.NET)

Unser heutiger Tipp liest nicht nur alle ID3v1-Tag Informationen aus, sondern kann diese auch wieder zurückspeichern.

Die MP3-Informationen werden hierbei in einem benutzerdefinierten Datentyp zwischengespeichert:

' Daten-Struktur der MP3-Informationen
Private Structure MP3Info
  Dim Titel As String
  Dim Interpret As String
  Dim Album As String
  Dim Jahr As String
  Dim Kommentar As String
  Dim Genre As Byte
End Structure
' Genre-Auflistung
Private Enum Genre
  Blues = 0
  ClassicRock = 1
  Country = 2
  Dance = 3
  Disco = 4
  Funk = 5
  Grunge = 6
  HipHop = 7
  Jazz = 8
  Meta = 9
  NewAge = 10
  Oldies = 11
  Other = 12
  Pop = 13
  R_B = 14
  Rap = 15
  Reggae = 16
  Rock = 17
  Techno = 18
  Industrial = 19
  Alternative = 20
  Ska = 21
  DeathMetal = 22
  Pranks = 23
  Soundtrack = 24
  EuroTechno = 25
  Ambient = 26
  TripHop = 27
  Vocal = 28
  JazzFunk = 29
  Fusion = 30
  Trance = 31
  Classical = 32
  Instrumental = 33
  Acid = 34
  House = 35
  Game = 36
  SoundClip = 37
  Gospel = 38
  Noise = 39
  AltRock = 40
  Bas = 41
  Soul = 42
  Punk = 43
  Space = 44
  Meditative = 45
  InstrumentalPop = 46
  InstrumentalRock = 47
  Ethnic = 48
  Gothic = 49
  Darkwave = 50
  TechnoIndustrial = 51
  Electronic = 52
  PopFolk = 53
  Eurodance = 54
  Dream = 55
  SouthernRock = 56
  Comedy = 57
  Cult = 58
  Gangsta = 59
  Top40 = 60
  ChristianRap = 61
  Pop_Funk = 62
  Jungle = 63
  NativeAmerican = 64
  Cabaret = 65
  NewWave = 66
  Psychadelic = 67
  Rave = 68
  Showtunes = 69
  Trailer = 70
  LoFi = 71
  Tribal = 72
  AcidPunk = 73
  AcidJazz = 74
  Polka = 75
  Retro = 76
  Musical = 77
  RockNRoll = 78
  HardRock = 79
  Folk = 80
  Folk_Rock = 81
  NationalFolk = 82
  Swing = 83
  Fusion1 = 84
  Bebob = 85
  Latin = 86
  Revival = 87
  Celtic = 88
  Bluegrass = 89
  Avantgarde = 90
  GothicRock = 91
  ProgressiveRock = 92
  PsychedelicRock = 93
  SymphonicRock = 94
  SlowRock = 95
  BigBand = 96
  Chorus = 97
  EasyListening = 98
  Acoustic = 99
  Humour = 100
  Speech = 101
  Chanson = 102
  Opera = 103
  ChamberMusic = 104
  Sonata = 105
  Symphony = 106
  BootyBass = 107
  Primus = 108
  PornGroove = 109
  Satire = 110
  SlowJam = 111
  Club = 112
  Tango = 113
  Samba = 114
  Folklore = 115
End Enum

ID3v1-Tag einer MP3-Datei auslesen

''' <summary>
''' Liest den ID3V1-Tag einer MP3-Datei aus
''' </summary>
''' <param name="sFile">MP3-Dateiname</param>
''' <returns>Struktur mit den MP3-Informationen</returns>
Private Function ReadMP3Info(ByVal sFile As String) As MP3Info
  Dim oInfo As New MP3Info
 
  ' Prüfen, ob Datei auch existiert
  If System.IO.File.Exists(sFile) Then
    Try
      Dim oStream As New System.IO.FileStream(sFile, IO.FileMode.Open)
 
      ' Position des MP3-Tags
      oStream.Seek(-128, IO.SeekOrigin.End)
 
      ' jetzt 128 Bytes lesen
      Dim bData(127) As Byte
      oStream.Read(bData, 0, 128)
 
      ' Byte in String umwandeln
      Dim sData As String = System.Text.Encoding.Default.GetString(bData)
 
      ' Prüfen, ob Daten mit TAG beginnen
      If sData.Substring(0, 3) = "TAG" Then
        With oInfo
          ' jetzt die Struktur mit den Infos füllen
          .Titel = StripNull(sData.Substring(3, 30))
          .Interpret = StripNull(sData.Substring(33, 30))
          .Album = StripNull(sData.Substring(63, 30))
          .Jahr = StripNull(sData.Substring(93, 4))
          .Kommentar = StripNull(sData.Substring(97, 30))
          .Genre = bData(127)
        End With
      End If
      oStream.Close()
 
    Catch ex As Exception
    End Try
  End If
 
  ' Rückgabewert: MP3Info
  Return (oInfo)
End Function

ID3v1-Tag speichern

''' <summary>
''' Speichert die IDVv1-Informationen in die angegebene Datei
''' </summary>
''' <param name="sFile">MP3-Dateiname</param>
''' <param name="Info">MP3Info-Struktur</param>
Private Function SaveMP3Info(ByVal sFile As String, ByVal Info As MP3Info) As Boolean
  Dim Success As Boolean = False
 
  ' Prüfen, ob Datei auch existiert
  If System.IO.File.Exists(sFile) Then
    Try
      Dim oStream As New System.IO.FileStream(sFile, IO.FileMode.Open)
 
      ' Position des MP3-Tags
      oStream.Seek(-128, IO.SeekOrigin.End)
 
      ' jetzt die MP3-Infos in ein Byte-Array konvertieren
      Dim bData(127) As Byte
      With Info
        FillData(bData, 0, "TAG")
        FillData(bData, 3, .Titel)
        FillData(bData, 33, .Interpret)
        FillData(bData, 63, .Album)
        FillData(bData, 93, .Jahr)
        FillData(bData, 97, .Kommentar)
        bData(127) = .Genre
      End With
      oStream.Write(bData, 0, 128)
      oStream.Close()
 
      Success = True
 
    Catch ex As Exception
    End Try
  End If
 
  ' Rückgabewert: Success
  Return (Success)
End Function

Hilfsfunktionen

' Sucht nach dem ersten Null-Zeichen und gibt den linken Teil
' des Strings zurück
Private Function StripNull(ByVal sData As String) As String
  Dim nPos As Integer = sData.IndexOf(Chr(0))
  If nPos >= 0 Then
    Return sData.Substring(0, nPos).TrimEnd
  Else
    Return sData.TrimEnd
  End If
End Function
' Kopiert den Text an die angegebene Position in das Byte-Array
Private Sub FillData(ByRef Data() As Byte, _
  ByVal StartPos As Integer, ByVal Text As String)
 
  Dim bData() As Byte = System.Text.Encoding.Default.GetBytes(Text)
  For i As Integer = 0 To bData.Length - 1
    Data(StartPos + i) = bData(i)
  Next
End Sub

Beispiel
Zunächst werden die MP3-Informationen einer MP3-Datei ausgelesen und in einem benutzerdefinierten Datentyp zwischengespeichert.

' MP3-Infos lesen und anzeigen
Dim sFile As String = "d:\test.mp3"
Dim oInfo As MP3Info = ReadMP3Info(sFile)

Jetzt werden die MP3-Informationen verändert...

With oInfo
  .Title = "MyMP3 File"
  .Artist = "Me"
  .Album = "My Album"
  .Year = "2009"
  .Comments = "No comment"
  .Genre = CByte(Genre.Disco)
End With

Diese Änderungen sollen nun in die MP3-Datei gespeichert werden...

If SaveMP3Info(sFile, oInfo) Then
  MsgBox("MP3-Informationen wurden erfolgreich geschrieben!", MsgBoxStyle.Information)
Else
  MsgBox("MP3-Informationen konnten nicht gespeichert werden!", MsgBoxStyle.Exclamation)
End If

Dieser Tipp wurde bereits 14.598 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel