Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mp3 - daten auslesen

mp3 - daten auslesen
11.05.2004 21:11:33
Markus H
Hallo,
ich stehe vor einem Problem, wo ich nicht mehr weiter weiß:
ich möchte meine MP3-Dateien in Excel verwalten. Im Augenblick wandele ich meine CDs in mp3s um und sortiere sie mithilfe eines Makros alphabetisch in verschiedene worksheets (in Form von
A1 = Titel
B1 = Interpret
C1 = Größe in MB).
Das klappt so weit ganz gut.
Nun möchte ich aber folgende Informationen hinzufügen:
- Spieldauer
- Bitrate usw.
Unter WindowsXP bspw. bekommt man diese Daten angezeigt, wenn man die Maus über einem mp3-File positioniert.
Das müsste doch mit einer API oder einer dll gehen, oder täusche ich mich? Das geht zwar schon etwas aus Excel raus, sollte aber machbar sein.
Wäre schön, wenn es hinterher auch unter Excel 2000/97 laufen würde, obwohl ich unter 2003 entwickle.
Wer kann mir einen Tipp geben? Bin für jeden Hinweis dankbar...
DANKE schonmal!
Markus
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mp3 - daten auslesen
11.05.2004 21:39:13
Ramses
Hallo
Das ist von "ActiveVB".
Bei VBA Gut kannst du das ja sicher anpassen


'--------------------------- Form1.frm --------------------------
Option Explicit
'Wurde in VB programmiert
'Die Dialoge müssen angepasst werden
Private Sub Command1_Click(index As Integer)
  Dim As Integer
  Dim mp3msginfo As String
  On Error GoTo Fehler
  Select Case index
    Case 1
      CommonDialog1.ShowOpen
      If CommonDialog1.FileName = "" Then Exit Sub
      FileName = CommonDialog1.FileName
      Label2.Caption = FileName
      GenreArray = Split(sGenreMatrix, "|")
      For i = LBound(GenreArray) To UBound(GenreArray)
          Combo1.AddItem GenreArray(i)
      Next
      GetId3 FileName
      Text1(0).Text = RTrim(id3Info.Title)
      Text1(1).Text = RTrim(id3Info.Artist)
      Text1(2).Text = RTrim(id3Info.Album)
      Text1(3).Text = RTrim(id3Info.sYear)
      Text1(4).Text = RTrim(id3Info.Comments)
 
      Combo1.ListIndex = id3Info.Genre
      ReadMP3 FileName
      Command1(2).Enabled = True
      Command1(3).Enabled = True
      Exit Sub
    Case 2
      If MsgBox("Wollen Sie die Daten wirklich ändern ?", _
               vbYesNo, "Daten ändern") = vbYes Then
        id3Info.Title = RTrim(Text1(0).Text)
        id3Info.Artist = RTrim(Text1(1).Text)
        id3Info.Album = RTrim(Text1(2).Text)
        id3Info.sYear = RTrim(Text1(3).Text)
        id3Info.Genre = Combo1.ListIndex
        id3Info.Comments = RTrim(Text1(4).Text)
        SaveId3 Label2.Caption, id3Info
      End If
    Case 3
      mp3msginfo = "Dateigrösse: " & _
          Format$(FileLen(Label2.Caption) / 1024, "#,###") & _
          " kB" & vbNewLine & "Länge: " & GetMP3Info.Duration & _
          " sec." & vbNewLine & vbNewLine
      mp3msginfo = mp3msginfo & "MPEG " & GetMP3Info.MpegVersion _
          & ".0" & " Layer " & GetMP3Info.MpegLayer & vbNewLine _
          & "Bitrate: " & GetMP3Info.Bitrate & " kbps" & _
          vbNewLine & "Frequenz: " & GetMP3Info.Frequency & _
          " Hz" & vbNewLine & "Modus: " & GetMP3Info.Mode & _
          vbNewLine & "Copyright: " & GetMP3Info.CopyRight & _
          vbNewLine & "Original: " & GetMP3Info.Original
      MsgBox mp3msginfo, vbOKOnly, "MP3-Info"
    Case Else
      Unload Me
      End
  End Select
  Exit Sub
Fehler:
End Sub
'-------------------------- Module1.bas -------------------------
Global FileName As String
Public actual_bitrate As Long
Public Type Id3
  Title As String * 30
  Artist As String * 30
  Album As String * 30
  sYear As String * 4
  Comments As String * 30
  Genre As Byte
End Type
Type MP3Info
  Bitrate As Integer
  Frequency As Long
  Mode As String
  Emphasis As String
  MpegVersion As Integer
  MpegLayer As Integer
  Padding As String
  CRC As String
  Duration As Long
  CopyRight As String
  Original As String
  PrivateBit As String
  VBR As Boolean
  Frames As Integer
End Type
Public GetMP3Info As MP3Info
Public id3Info As Id3
Public GenreArray() As String
Public Const sGenreMatrix = "Blues|Classic Rock|Country|" + _
"Dance|Disco|Funk|Grunge|Hip-Hop|Jazz|Metal|New Age|Oldies|" + _
"Other|Pop|R&B|Rap|Reggae|Rock|Techno|Industrial|" + _
"Alternative|Ska|Death Metal|Pranks|Soundtrack|Euro-Techno|" + _
"Ambient|Trip Hop|Vocal|Jazz+Funk|Fusion|Trance|Classical|" + _
"Instrumental|Acid|House|Game|Sound Clip|Gospel|Noise|" + _
"Alt. Rock|Bass|Soul|Punk|Space|Meditative|Instrumental Pop|" + _
"Instrumental Rock|Ethnic|Gothic|Darkwave|Techno-Industrial|" + _
"Electronic|Pop-Folk|Eurodance|Dream|Southern Rock|Comedy|" + _
"Cult|Gangsta Rap|Top 40|Christian Rap|Pop/Punk|Jungle|" + _
"Native American|Cabaret|New Wave|Phychedelic|Rave|Showtunes|" + _
"Trailer|Lo-Fi|Tribal|Acid Punk|Acid Jazz|Polka|Retro|" + _
"Musical|Rock & Roll|Hard Rock|Folk|Folk/Rock|National Folk|" + _
"Swing|Fast-Fusion|Bebob|Latin|Revival|Celtic|Blue Grass|" + _
"Avantegarde|Gothic Rock|Progressive Rock|Psychedelic Rock|" + _
"Symphonic Rock|Slow Rock|Big Band|Chorus|Easy Listening|" + _
"Acoustic|Humour|Speech|Chanson|Opera|Chamber Music|Sonata|" + _
"Symphony|Booty Bass|Primus|Porn Groove|Satire|Slow Jam|" + _
"Club|Tango|Samba|Folklore|Ballad|power Ballad|Rhythmic Soul|" + _
"Freestyle|Duet|Punk Rock|Drum Solo|A Capella|Euro-House|" + _
"Dance Hall|Goa|Drum & Bass|Club-House|Hardcore|Terror|indie|" + _
"Brit Pop|Negerpunk|Polsk Punk|Beat|Christian Gangsta Rap|" + _
"Heavy Metal|Black Metal|Crossover|Comteporary Christian|" + _
"Christian Rock|Merengue|Salsa|Trash Metal|Anime|JPop|Synth Pop"
Public Function GetId3(FileName As String)
  Dim Tag As String * 3
  If FileName = "" Then Exit Function
  If FileName = "*.mp3" Then Exit Function
  Open FileName For Binary As #1
  Get #1, FileLen(FileName) - 127, Tag
  If Tag = "TAG" Then
    Get #1, FileLen(FileName) - 124, id3Info
  Else
    MsgBox "Diese MP3-Datei besitzt keinen ID3-Tag", _
        vbInformation, "MP3-Info"
  End If
  Close #1
End Function
Public Function SaveId3(FileName As String, MP3Info As Id3)
  Dim Tag As String * 3
  If FileName = "" Then Exit Function
  On Error GoTo ErrHandle
  Open FileName For Binary As #1
  Get #1, FileLen(FileName) - 127, Tag
  If Tag = "TAG" Then
    Put #1, FileLen(FileName) - 124, MP3Info
  Else
    Put #1, FileLen(FileName) - 127, "TAG"
    Close #1
    SaveId3 FileName, MP3Info
  End If
  Close #1
ErrHandle:
  If Err.Number = 75 Then
    MsgBox "Datei ist schreibgeschützt.", vbExclamation, _
        "MP3-Info"
    Close #1
  Else
    If Err.Description = "" Then
      Close #1
    Else
      MsgBox "Fehler: " & Err.Description, vbCritical, "MP3-Info"
      Close #1
    End If
  End If
End Function
Public Function BinToDec(BinValue As StringAs Long
  Dim As Integer
  BinToDec = 0
  For i = 1 To Len(BinValue)
    If Mid(BinValue, i, 1) = 1 Then
      BinToDec = BinToDec + 2 ^ (Len(BinValue) - i)
    End If
  Next i
End Function
Public Function ByteToBit(ByteArray) As String
  Dim As Integer, z As Integer
  ByteToBit = ""
  For z = 1 To 4
    For i = 7 To Step -1
      If Int(ByteArray(z) / (2 ^ i)) = 1 Then
        ByteToBit = ByteToBit & "1"
        ByteArray(z) = ByteArray(z) - (2 ^ i)
      Else
        If ByteToBit <> "" Then
          ByteToBit = ByteToBit & "0"
        End If
      End If
    Next i
  Next z
End Function
Public Function BinaryHeader(FileName As StringAs String
  Dim ByteArray(4) As Byte
  Dim XingH As String * 4
  Dim FIO As Integer, n As Long
  Dim As Integer, x As Byte
  Dim As Integer
  If FileName = "" Then Exit Function
  FIO% = FreeFile
  Open FileName For Binary Access Read As FIO%
  n& = LOF(FIO%): If n& < 256 Then Close FIO%: Return
  For i = 1 To 5000
    Get #FIO%, i, x
    If x = 255 Then
      Get #FIO%, i + 1, x
      If x > 249 And x < 252 Then
        Headstart = i
        Exit For
      End If
    End If
  Next i
  Get #1, Headstart + 36, XingH
  If XingH = "Xing" Then
    GetMP3Info.VBR = True
    For z = 1 To '
      Get #1, Headstart + 43 + z, ByteArray(z)
    Next z
    Frames = BinToDec(ByteToBit(ByteArray))
    GetMP3Info.Frames = Frames
  Else
    GetMP3Info.VBR = False
  End If
  For z = 1 To 4
    Get #1, Headstart + z - 1, ByteArray(z)
  Next z
  Close FIO%
  BinaryHeader = ByteToBit(ByteArray)
End Function
Public Function ReadMP3(FileName As StringAs MP3Info
  If FileName = "" Then Exit Function
  bin = BinaryHeader(FileName)
  Version = Array(25, 0, 2, 1)
  MpegVersion = Version(BinToDec(Mid(bin, 12, 2)))
  Layer = Array(0, 3, 2, 1)
  MpegLayer = Layer(BinToDec(Mid(bin, 14, 2)))
  SMode = Array("Stereo", "Joint stereo", "Zwei-Kanal", _
                "Ein-Kanal")
  Mode = SMode(BinToDec(Mid(bin, 25, 2)))
  Emph = Array("no", "50/15", "reserviert", "CCITT J 17")
  Emphasis = Emph(BinToDec(Mid(bin, 31, 2)))
  Select Case MpegVersion
    Case 1
      Freq = Array(44100, 48000, 32000)
    Case Or 25
      Freq = Array(22050, 24000, 16000)
    Case Else
      Frequency = 0
      Exit Function
  End Select
  Frequency = Freq(BinToDec(Mid(bin, 21, 2)))
  If GetMP3Info.VBR = True Then
    Temp = Array(, 12, 144, 144)
    Bitrate = (FileLen(FileName) * Frequency) / _
              (Int(GetMP3Info.Frames)) / 1000 / Temp(MpegLayer)
  Else
    Dim LayerVersion As String
    LayerVersion = MpegVersion & MpegLayer
    Select Case Val(LayerVersion)
      Case 11
        Brate = Array(0, 32, 64, 96, 128, 160, 192, 224, 256, _
                      288, 320, 352, 384, 416, 448)
      Case 12
        Brate = Array(0, 32, 48, 56, 64, 80, 96, 112, 128, 160, _
                      192, 224, 256, 320, 384)
      Case 13
        Brate = Array(0, 32, 40, 48, 56, 64, 80, 96, 112, 128, _
                      160, 192, 224, 256, 320)
      Case 21 Or 251
        Brate = Array(0, 32, 48, 56, 64, 80, 96, 112, 128, 144, _
                      160, 176, 192, 224, 256)
      Case 22 Or 252 Or 23 Or 253
        Brate = Array(0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, _
                      112, 128, 144, 160)
      Case Else
        Bitrate = 1
        Exit Function
    End Select
    Bitrate = Brate(BinToDec(Mid(bin, 17, 4)))
  End If
  NoYes = Array("Nein", "Ja")
  Original = NoYes(Mid(bin, 30, 1))
  CopyRight = NoYes(Mid(bin, 29, 1))
  Padding = NoYes(Mid(bin, 23, 1))
  PrivateBit = NoYes(Mid(bin, 24, 1))
  YesNo = Array("yes", "no")
  CRC = YesNo(Mid(bin, 16, 1))
  ms = (FileLen(FileName) * 8) / Bitrate
  Duration = Int(ms / 1000)
  With GetMP3Info
    .Bitrate = Bitrate
    .CRC = CRC
    .Duration = Duration
    .Emphasis = Emphasis
    .Frequency = Frequency
    .Mode = Mode
    .MpegLayer = MpegLayer
    .MpegVersion = MpegVersion
    .Padding = Padding
    .Original = Original
    .CopyRight = CopyRight
    .PrivateBit = PrivateBit
  End With
End Function
Public Function CheckTag(FileName As String)
  Dim Tag As String * 3
  If FileName = "" Then Exit Function
  Open FileName For Binary As #1
  Get #1, FileLen(FileName) - 127, Tag
  If Tag = "TAG" Then
     CheckTag = True
  Else
     CheckTag = False
  End If
  Close #1
End Function

     Code eingefügt mit Syntaxhighlighter 2.5

Gruss Rainer
Anzeige
AW: mp3 - daten auslesen
11.05.2004 22:27:38
Markus H
Hallo Rainer,
vielen Dank für Deine schnelle (und umfangriche!!!) Hilfe!
Ich hatte -ehrlich gesagt- gedacht, das wäre fast so einfach wie das CD-Rom-Laufwerk zu öffnen... :-)
Muss das erst mal in Ruhe eruieren und anpassen! Da hab ich etwas dran zu beißen!
=:-)
Nochmals vielen Dank!!!
Gruß,
Markus
Anzeige
AW: mp3 - daten auslesen
11.05.2004 23:30:58
K.Rola
Hallo,
um welche Dateiinfos gehts dir genau? Es gibt zwei Möglichkeiten, erstens
die Eigenschaften, die du auch im Explorer siehst oder halt die headerinfos.
Hin wie her, ist ne Menge Schrott dabei, den du sicher nicht brauchst.
Gruß K.Rola
AW: mp3 - daten auslesen
12.05.2004 01:14:36
Fritz Sanne
Hallo Markus,
ich habe eben mal in alten Unterlagen geblättert und einen Work-Shop im PC-Magazin 5/2001 zu dem Thema gefunden.
Ob das nun was für Dich ist, kann ich nicht sagen, dazu habe ich zu wenig Ahnung. Wenn es aber was sein könnte, kann ich dir die Listings von der Heft-CD posten - aber nicht mehr heute nacht.
Grüße, Fritz
Anzeige
AW: mp3 - daten auslesen
12.05.2004 01:26:27
Fritz Sanne
Und nochmal ich.
Die Fortsetzung ist dann auf der Heft-PC 7/2001. Sieht ganz schön gewaltig aus und teilweise ab Excel 97.
Grüße,
Fritz
AW: mp3 - daten auslesen
12.05.2004 12:44:28
Markus H.
Hallo Fritz,
vielen Dank für Dein Angebot! Vermutlich ist es etwas aufwändig Listings abzutippen, aber interessieren würd es mich schon mal. Vielleicht kannst Du die Seite einscannen und mit zumailen, das ist sicherlich einfacher.
Danke und Gruß,
Markus
Anzeige
AW: mp3 - daten auslesen
12.05.2004 12:43:35
Markus H.
Hallo K.Rola,
also die Headerinfos wären schon interessant, aber sicher auch aufwendiger zu ermitteln. Mir reicht eine kurze Angabe über die Bitrate und die Spieldauer in Minuten.
Das müsste auch ohne viel Quellcode machbar sein...
Es wäre ein schönes "nice-to-have". Dann müsste ich mich nicht durch den vielen Code von Ramses durcharbeiten, der m.E. auch noch viel mehr kann...
Danke und Gruß,
Markus
Anzeige
AW: mp3 - daten auslesen
12.05.2004 13:24:58
K.Rola
Hallo,
das ist ein Irrglaube, der Aufwand für das Auslesen ist der gleiche egal,
ob nur eine oder alle Infos ausgelesen werden.
Wenn du magst, lad ich dir ein Beispiel hoch.
Gruß K.Rola
AW: mp3 - daten auslesen
12.05.2004 13:44:39
Markus H
Hallo K.Rola,
ein Beispiel wär echt super! Das "VBA gut" war nämlich 'verklickt' von mir, fange gerade erst an. Und ich würde vermutlich Wochen benötigen, bis ich den Ramses-Code angepasst hätte... =:-)
Dank Dir!
Markus
Anzeige
AW: mp3 - daten auslesen
12.05.2004 15:15:25
K.Rola
Hallo,

Die Datei https://www.herber.de/bbs/user/6269.xls wurde aus Datenschutzgründen gelöscht

Benutz die Datei nur, wenn du akzeptierst, dass ich keinerlei Garantie
übernehme(obwohl getestet und problemlos funktionsfähig).
Gruß K.Rola
AW: mp3 - daten auslesen
12.05.2004 15:33:25
Fritz Sanne
Hallo Markus,
ich habe jetzt die Listings kopiert; aber ich weiß gar nicht, ob ich die hier alle reinbekomme. Dann sind da noch vier Excel-Vorlagen, die ich einzeln hochladen müsste.
Mache ich natürlich gerne, wenn Du das möchtest.
Gib mal Laut.
Grüße,
Fritz
Anzeige
AW: mp3 - daten auslesen
12.05.2004 19:25:39
Markus H.
Hallo K.Rola, Hallo Fritz,
vielen Dank für Eure Hilfe! Ihr habt mir wirklich sehr weitergeholfen! =:-) Auch nochmals vielen Dank an Ramses! Jetzt kann ich die gewünschten Informationen auslesen...
Wünsche noch einen schönen Abend!
Danke und Gruß,
=:-) Markus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

MP3-Daten in Excel auslesen und verwalten


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xls)" und wähle "Einfügen" > "Modul".
  3. Code einfügen: Kopiere den bereitgestellten Code (z.B. von Ramses) in das Modul. Achte darauf, dass der Code auf die MP3-Datei zugreifen kann.
  4. Makro anpassen: Stelle sicher, dass die Variablen im Code für die MP3-Daten wie Titel, Interpret, Spieldauer und Bitrate korrekt gesetzt sind.
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die MP3-Daten auszulesen.

Hier ist ein einfaches Beispiel, wie Du die MP3-Metadaten auslesen kannst:

Sub MP3InfoAuslesen()
    Dim mp3Datei As String
    mp3Datei = Application.GetOpenFilename("MP3-Dateien (*.mp3), *.mp3")
    If mp3Datei <> "False" Then
        ' Hier wird der Code zum Auslesen der MP3-Daten eingefügt
    End If
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"
    Lösung: Überprüfe den Pfad zur MP3-Datei und stelle sicher, dass die Datei existiert.

  • Fehler: "Kein ID3-Tag gefunden"
    Lösung: Stelle sicher, dass die MP3-Datei tatsächlich Metadaten enthält. Wenn nicht, musst Du möglicherweise die MP3-Metadaten ändern.

  • Problem beim Ausführen des Makros
    Lösung: Überprüfe die Sicherheitseinstellungen in Excel. Stelle sicher, dass Makros aktiviert sind.


Alternative Methoden

  1. Verwendung von Drittanbieter-Software: Es gibt spezielle Programme, die die MP3-Metadaten auslesen und in Excel exportieren können.
  2. Power Query: In neueren Excel-Versionen kannst Du Power Query verwenden, um Daten aus verschiedenen Quellen zu importieren. Es ist jedoch weniger geeignet für MP3-Daten.
  3. Python-Skripte: Wenn Du mit Python vertraut bist, kannst Du Bibliotheken wie mutagen verwenden, um MP3-Metadaten auszulesen und in ein Excel-Dokument zu schreiben.

Praktische Beispiele

  • Beispiel: MP3-Daten in Excel einfügen
    Nehmen wir an, Du hast eine MP3-Datei mit den folgenden Metadaten:
    • Titel: "Song XYZ"
    • Interpret: "Künstler ABC"
    • Spieldauer: "3:45"
    • Bitrate: "192 kbps"

Du kannst diese Informationen in eine Excel-Tabelle einfügen, indem Du die entsprechenden Variablen im VBA-Code verwendest.

Cells(1, 1).Value = id3Info.Title
Cells(1, 2).Value = id3Info.Artist
Cells(1, 3).Value = GetMP3Info.Duration
Cells(1, 4).Value = GetMP3Info.Bitrate

Tipps für Profis

  • Metadaten regelmäßig aktualisieren: Halte Deine MP3-Metadaten aktuell, um eine bessere Organisation Deiner Musikbibliothek zu gewährleisten.
  • Batch-Verarbeitung: Wenn Du viele MP3-Dateien hast, überlege, ein Skript zu entwickeln, das alle Dateien in einem Rutsch verarbeitet.
  • Verwendung von Tags: Nutze ID3v2-Tags, um zusätzliche Informationen zu speichern, die eventuell hilfreich sein könnten.

FAQ: Häufige Fragen

1. Kann ich MP3-Metadaten direkt in Excel ändern?
Ja, Du kannst die Metadaten von MP3-Dateien direkt in Excel ändern, indem Du den entsprechenden VBA-Code anpasst.

2. Welche Excel-Version benötige ich?
Die meisten der beschriebenen Methoden funktionieren ab Excel 2000, jedoch sind neuere Versionen empfehlenswert, um die besten Funktionen nutzen zu können.

3. Wo finde ich den VBA-Code, um MP3-Daten auszulesen?
Du kannst den Code von verschiedenen Benutzern in Excel-Foren oder von Ressourcen wie PC-Magazinen finden, die sich mit diesem Thema beschäftigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige