IDV2 Tag mittels VBA in Audiodateien reinschreiben
#1
Hallo liebe Excel Experten,

ich möchte mittels VBA Code in der Lage sein, IDV2 Tags in  Audio Dateien reinzuschreiben. Bei meiner Recherche bin ich auf folgenden voll funktionierden Code für das Auslesen eines IDV2 Tags aus Audiodateien gestoßen:


Code:
'Quelle:
'http://www.mrexcel.com/forum/excel-questions/52719-read-mp3-id3v2-tags.html
'IDV2 Tags aus Audiodateien lesen
Option Explicit
Public Type ID3v2
sTitle As String
sArtist As String
sAlbum As String
sComment As String
sYear As String
sGenre As String
sComposer As String
sURL As String
sOrgArtist As String
sCopyright As String
sEncodeBy As String
sTrack As String
sMedium As String
sLen As String
End Type

' Prüfen, ob eine MP3-Datei über ID3v2-Infos verfügt
' Rückgabewert: Länge des ID3v2-Tags
Public Function MP3_ID3v2Exists( _
ByVal sFile As String) As Long

Dim sText As String
Dim sBin As String
Dim sID3 As String * 3
Dim i As Integer
Dim z As Integer
Dim b(4) As Byte
Dim F As Integer
Dim nID3v2Size As Long

' Datei öffnen
On Error GoTo ErrHandler
F = FreeFile
Open sFile For Binary As #F
Get #F, 1, sID3
If sID3 <> "ID3" Then
MP3_ID3v2Exists = 0
Close #F
Exit Function
End If

' Größe des ID3v2-Tags ermitteln
Get #F, 7, b(4)
Get #F, 8, b(3)
Get #F, 9, b(2)
Get #F, 10, b(1)

sBin = ""
For z = 2 To 4
For i = 0 To 6
sBin = sBin & CStr(Abs(b(z) And (2 ^ i)))
Next i
Next z
nID3v2Size = 0
For i = 7 To 27
nID3v2Size = nID3v2Size + ((2 ^ i) * Val(Mid(sBin, i - 6, 1)))
Next i
nID3v2Size = nID3v2Size + b(1) + 10
MP3_ID3v2Exists = nID3v2Size
Close #F
Exit Function

ErrHandler:
If F > 0 Then Close #F
MP3_ID3v2Exists = 0
End Function

' ID3v2-Infos auslesen
Public Function MP3_ReadID3v2Tag( _
ByVal sFile As String, _
ByVal nID3v2Size As Long) As ID3v2

Dim nPos As Long
Dim sFrameType As String * 4
Dim sText As String
Dim sBin As String
Dim sID3 As String * 3
Dim i As Integer
Dim z As Integer
Dim b(4) As Byte
Dim F As Integer
Dim nSize As Long

On Error GoTo ErrHandler

' Datei öffnen
F = FreeFile
Open sFile For Binary As #F

' Start-Position
nPos = 11

' Liest den Framtyp so lange aus bis es nichts
' mehr zum lesen gibt
Do While nPos < nID3v2Size
' der eingelesene Framtyp
Get #F, nPos, sFrameType
If InStr(sFrameType, Chr$(0)) > 0 Then
' Fertig nichts mehr zum lesen
Close #F
Exit Do
End If

nPos = nPos + 4
Get #F, nPos, b(4) ' FrameTyp Größe
Get #F, nPos + 1, b(3) ' FrameTyp Größe
Get #F, nPos + 2, b(2) ' FrameTyp Größe
Get #F, nPos + 3, b(1) ' FrameTyp Größe
nPos = nPos + 5

sBin = ""
For z = 2 To 4
For i = 0 To 7 Step 1
sBin = sBin & CStr(Abs(b(z) And (2 ^ i)))
Next i
Next z

' Framtyp-Größe ausrechnen
nSize = 0
For i = 8 To 30
nSize = nSize + ((2 ^ i) * Val(Mid$(sBin, i - 7, 1)))
Next i
nSize = nSize + b(1)

' ID3v2-Info
sText = String$(nSize, vbNullChar)
nPos = nPos + 1
Get #F, nPos, sText
sText = TrimNullChar(sText)

With MP3_ReadID3v2Tag
Select Case sFrameType
Case "TMED"
.sMedium = sText
Case "TLEN"
.sLen = sText
Case "TRCK"
.sTrack = sText
Case "TENC"
.sEncodeBy = sText
Case "WXXX"
.sURL = sText
Case "TCOP"
.sCopyright = sText
Case "TOPE"
.sOrgArtist = sText
Case "TCOM"
.sComposer = sText
Case "COMM"
.sComment = sText
Case "TCON"
sText = Replace(sText, "(", "")
sText = Replace(sText, ")", "")
.sGenre = sText
Case "TYER"
.sYear = sText
Case "TALB"
.sAlbum = sText
Case "TPE1"
.sArtist = sText
Case "TIT2"
.sTitle = sText
End Select
nPos = nPos + nSize
End With
Loop

ErrHandler:
Close #F
End Function
Private Function TrimNullChar( _
ByVal sString As String) As String
sString = Replace(sString, vbNullChar, vbNullString)
TrimNullChar = Trim$(sString)
End Function

Sub test()
Dim sFile As String, uID3v2 As ID3v2, nSize As Long
' MP3 path and name

sFile = "C:\Audio\IDV2_Testdatei.mp3"


' MP3 V2 Tag info Exist?
nSize = MP3_ID3v2Exists(sFile)
If nSize > 0 Then
uID3v2 = MP3_ReadID3v2Tag(sFile, nSize)

With uID3v2
MsgBox "Title: " & .sTitle & vbCrLf & _
"Artist: " & .sArtist & vbCrLf & _
"Album: " & .sAlbum & vbCrLf & _
"Track: " & .sTrack & vbCrLf & _
"Length: " & .sLen & vbCrLf & _
"Medium: " & .sMedium & vbCrLf & _
"Genre: " & .sGenre
End With
Else
MsgBox "No ID3v2 tag info available"
End If
End Sub
Um jetzt nicht unendliche Stunden vor dem Computer sitzen zu müssen, bräuchte ich nun euren Rat und eure Expertise.Wie sieht der entsprechende Code zum Schreiben eines IDV2 Tags für Audiodateien aus.  Anmerkung

noch von mir, der IDV2 Tag hat gegenüber dem IDV1 Tag den Vorteil, dass es defacto so gut wie keine Beschränkungen in der Textlänge der einzelnen Tags geben soll.

Vielen Dank für eure Hilfe und Mühen schon mal im voraus.
Top
#2
Das kann einfacher:

Code:
Sub M_snb()
    c00 = "G:\muziek\"
    c01 = Dir(c00 & "*.mp3")
    
    With CreateObject("shell.application").Namespace(c00)
        MsgBox .getdetailsof(.Items.Item(c01), -1)
    End With
End Sub
Top
#3
Hallöchen,

zum Auslesen kannst Du Dir auch mal das anschauen
http://www.vba-blog.de/?q=content/dateie...a-auslesen
Dateieigenschaften gibt es inzwischen um die 300, siehe hier
https://www.administrator.de/frage/vba-d...64976.html

das mit dem V2 Tag ist wohl nicht so einfach Sad Ich hab da auch noch was vor, allerdings nicht so schnell, kann noch Monate daueren.

Hier im Anhang mal was älteres von mir.


Angehängte Dateien
.xlsm   MP3WMA-List+Edit.xlsm (Größe: 46,73 KB / Downloads: 11)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Mir wird gezeigt:

Artist
Title
Tracknumber
Duration
Genre
Bitrate
Protection
Size

Bitt lade ein 'screenshot' hoch.
Top
#5
Photo 
Hallo SNB,

anbei mein Screenshot. Dies sieht bei mir übrigens bei allen MP3 und WMA Dateien so aus. Ich bekomme einfach keine Anzeige des Titels.



[
Bild bitte so als Datei hochladen: Klick mich!
]

Da dein Code aufgrund seiner Kürze sehr interessant ist, vielleicht könntest du ein paar Kommentare und Quellenangaben

dazu einfügen. Verstehen tue ich diese Programmieranweisungen nämlich bislang nicht. Vielen Dank schon mal.
Top
#6
Kansst du die MP3 Datei (eventuell als 'zip') hier hochladen ?

Dann kann ich hier testen welche Ergebnisse ich bekomme.

Kannst du sagen welche Windows Version du verwendest (weil alle diese Eigenschaften von Windows (=shell) gelesen werden).

Ich habe die Code hier 'geklaut':

http://www.snb-vba.eu/VBA_Bestanden_en.html#L_64
Top
#7
Hallo Snb,

vielen Dank schon mal für den Link. Als Betriebsystem benutze ich derzeit Window 10.
Top
#8
Hallöchen

was man übrigens auch machen kann, ist, die Tags auslesen, in Excel bearbeiten, als csv speichern und in mp3tag einlesen und die Dateien damit ändern.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste