Vor längerer Zeit hatten wir in einem Tipp gezeigt, wie sich MP3-Informationen (ID3v1) auslesen lassen: 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 ' 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 17.569 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
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. |