Benutzer mit den meisten Antworten
Metadaten von Musikdateien auslesen

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.
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
- Als Antwort markiert Nico Höhn Samstag, 5. November 2016 15:05
- Tag als Antwort aufgehoben Nico Höhn Samstag, 5. November 2016 23:38
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 09:56
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 09:50
-
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()
- Als Antwort markiert Nico Höhn Samstag, 5. November 2016 23:39
- Tag als Antwort aufgehoben Nico Höhn Samstag, 5. November 2016 23:39
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 09:56
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 09:50
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
-
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:
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 -
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
- Als Antwort markiert Nico Höhn Samstag, 5. November 2016 15:05
- Tag als Antwort aufgehoben Nico Höhn Samstag, 5. November 2016 23:38
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 09:56
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 09:50
-
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 -
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.
-
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
-
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()
- Als Antwort markiert Nico Höhn Samstag, 5. November 2016 23:39
- Tag als Antwort aufgehoben Nico Höhn Samstag, 5. November 2016 23:39
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 09:56
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 09:50