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.677 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 Juli 2024 Dieter Otter Beliebige Zeichen am Anfang und Ende eines Strings entfernen Mit der Trim-Funktion lassen sich nicht nur Leerzeichen, sondern bei Bedarf auch beliebige Zeichen entfernen. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |