none
Metadaten von Musikdateien auslesen RRS feed

  • Frage

  • Hallo,

    ich will eine App in vb.net schreiben mit der ich die Metadaten(titel, Interpret usw.) von Musikdateien auslesen kann. Ich habe jetzt ewig im web gebingt(:-) und dazu nur Anweisungen gefunden wo die letzten 128 Byte oder die ersten 128 Byte durchsucht werden und dann Schrittweise die Daten gelesen werden. Teilweise soll man id3 Bibliotheken downloaden.

    Es würde mich wundern wenn es dafür nichts von Microsoft gibt, was in Visual Studio bereits integriert ist. Gibt es tatsächlich keine anderen Möglichkeiten? Ich meine jedes Programm, dass Musikdateien handelt benötigt sowas.

    Dienstag, 1. November 2016 23:39

Antworten

  • Hallo Nico Höhn,

    der Explorer hat auch überhaupt keine Schwierigkeiten diese Informationen anzuzeigen, was direkt klar macht - es gibt mit Sicherheit eine Möglichkeit diese Metadaten mit Windows zu ermitteln. Im Englischsprachigen Forum wurde dies dann auch schon diskutiert, mit folgender Lösung:

    Sub Main()
            Dim FileName as String
            FileName = "C:\temp\testfile.wtv"
            Dim Properties As Dictionary(Of Integer, KeyValuePair(Of String, String)) = GetFileProperties(FileName)
            For Each FileProperty As KeyValuePair(Of Integer, KeyValuePair(Of String, String)) In Properties
                Console.WriteLine("{0}: {1}", FileProperty.Value.Key, FileProperty.Value.Value)
            Next
    End Sub
    
        Public Function GetFileProperties(ByVal FileName As String) As Dictionary(Of Integer, KeyValuePair(Of String, String))
            Dim Shell As New Shell
            Dim Folder As Folder = Shell.[NameSpace](Path.GetDirectoryName(FileName))
            Dim File As FolderItem = Folder.ParseName(Path.GetFileName(FileName))
            Dim Properties As New Dictionary(Of Integer, KeyValuePair(Of String, String))()
            Dim Index As Integer
            Dim Keys As Integer = Folder.GetDetailsOf(File, 0).Count
            For Index = 0 To Keys - 1
                Dim CurrentKey As String = Folder.GetDetailsOf(Nothing, Index)
                Dim CurrentValue As String = Folder.GetDetailsOf(File, Index)
                If CurrentValue <> "" Then
                    Properties.Add(Index, New KeyValuePair(Of String, String)(CurrentKey, CurrentValue))
                End If
            Next
            Return Properties
        End Function

    Weitere Infos zu den Metadaten (Technet): "Retrieving Extended File Properties"

    Gruß


    - Florian

    Mittwoch, 2. November 2016 10:24
  • Hey,

    habe jetzt doch noch eine Lösung gefunden und nehme hiermit auch meine Kritik an MS Zurück.

    Hier der Code:

    Dim MusikEigenschaften As FileProperties.MusicProperties

     MusikEigenschaften = Await Datei.Properties.GetMusicPropertiesAsync()

    Samstag, 5. November 2016 23:39

Alle Antworten

  • Hallo,

    auch Microsoft kocht nur mit Wasser... Im Laufe der Jahre hat man für verschiedenste Programme wie Media Player, Expression Encoder, Zune (letztere beide eingestellt) verschiedene (häufig komplexe) APIs bereitgestellt. Letztendlich bieten die Dir aber keine Vorteile.

    Zudem hat jedes Format seine eigene Spezifikationen und Launen. Das heute häufigste Format MP3 verwendet in der Tat (ID3) Tags, anhand derer man Zusatzdaten ablegen bzw. abrufen kann. In einem älteren Beitrag habe ich mal ein Beispiel dazu gebastelt. Auch das setzt im wesentlich auf einer Bibliothek auf - die CodePlex Bibliothek ist bereits verschwunden, dort findet man aber ähnliche Projekte.

    Gruß Elmar

    Mittwoch, 2. November 2016 07:15
    Beantworter
  • Hallo Nico,

    es gibt sicher verschiedene Libraries, die man hierfür nehmen könnte. Aber falls keine davon deinen Ansprüchen genügt, wäre es auch möglich, dass Du eine eigene Library dafür schreibst. Evtl. wird die ja zum Standard :)

    Unter:

      http://id3.org/

    findest Du detaillierte Beschreibungen der einzelnen ID3 Formate bzw. den verschiedenen Versionen.

    Unter:

      http://id3.org/Implementations

    findest Du dann Links zu Libraries.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 2. November 2016 09:57
    Moderator
  • Hallo Nico Höhn,

    der Explorer hat auch überhaupt keine Schwierigkeiten diese Informationen anzuzeigen, was direkt klar macht - es gibt mit Sicherheit eine Möglichkeit diese Metadaten mit Windows zu ermitteln. Im Englischsprachigen Forum wurde dies dann auch schon diskutiert, mit folgender Lösung:

    Sub Main()
            Dim FileName as String
            FileName = "C:\temp\testfile.wtv"
            Dim Properties As Dictionary(Of Integer, KeyValuePair(Of String, String)) = GetFileProperties(FileName)
            For Each FileProperty As KeyValuePair(Of Integer, KeyValuePair(Of String, String)) In Properties
                Console.WriteLine("{0}: {1}", FileProperty.Value.Key, FileProperty.Value.Value)
            Next
    End Sub
    
        Public Function GetFileProperties(ByVal FileName As String) As Dictionary(Of Integer, KeyValuePair(Of String, String))
            Dim Shell As New Shell
            Dim Folder As Folder = Shell.[NameSpace](Path.GetDirectoryName(FileName))
            Dim File As FolderItem = Folder.ParseName(Path.GetFileName(FileName))
            Dim Properties As New Dictionary(Of Integer, KeyValuePair(Of String, String))()
            Dim Index As Integer
            Dim Keys As Integer = Folder.GetDetailsOf(File, 0).Count
            For Index = 0 To Keys - 1
                Dim CurrentKey As String = Folder.GetDetailsOf(Nothing, Index)
                Dim CurrentValue As String = Folder.GetDetailsOf(File, Index)
                If CurrentValue <> "" Then
                    Properties.Add(Index, New KeyValuePair(Of String, String)(CurrentKey, CurrentValue))
                End If
            Next
            Return Properties
        End Function

    Weitere Infos zu den Metadaten (Technet): "Retrieving Extended File Properties"

    Gruß


    - Florian

    Mittwoch, 2. November 2016 10:24
  • Hallo,

    kann es sein das Shell, Folder, Path und Folderitem nicht mehr unterstützt werden? Bei mir kommt die Fehlermeldung, dass diese Typen nicht definiert sind.

    Mittwoch, 2. November 2016 17:03
  • Hallo Nico,

    damit Du die Schnittstellen zur Verfügung hast, musst Du die COM Typbibliothek "Microsoft Shell Controls and Automation" hinzufügen, die dann als "Shell32" in den Verweisen auftaucht. Und sie via Imports Shell32 für die Codedatei bekannt machen.

    Gruß Elmar
    Mittwoch, 2. November 2016 19:59
    Beantworter
  • Hallo Elmar,

    danke für die Infos, habe es jetzt hinbekommen. Bin gespannt ob das auch in Apps funktioniert, kann ich aber eigentlich nicht vorstellen. Ich werde mir mal die Bibliothek taglib anschauen. Finde es schon schwach, dass Microsoft hier keine eigene Bibliothek anbietet.

    Samstag, 5. November 2016 15:03
  • Hallo Nico,

    Windows Store Apps? Nöö! Dort siehe: Abrufen von Dateieigenschaften sowie Windows.Media.MediaProperties Namespace.

    Eine "eigene" Bibliothek lässt sich leichter portieren ;))

    Gruß Elmar

    Samstag, 5. November 2016 18:36
    Beantworter
  • Hey,

    habe jetzt doch noch eine Lösung gefunden und nehme hiermit auch meine Kritik an MS Zurück.

    Hier der Code:

    Dim MusikEigenschaften As FileProperties.MusicProperties

     MusikEigenschaften = Await Datei.Properties.GetMusicPropertiesAsync()

    Samstag, 5. November 2016 23:39