Entwickler-Ecke

Multimedia / Grafik - Tags (Interpret, Titel, Genre, ...) einer WMA - Datei


Franz65 - Mo 19.05.14 13:14
Titel: Tags (Interpret, Titel, Genre, ...) einer WMA - Datei
Hallo,

ich versuche bereits seit Stunden aus einer WMA-Datei die Tags zu extrahieren. Anschließend möchte ich sie bearbeiten und wieder speichern. Bisher habe ich keine geeignete Lösung gefunden. Ich weiß, dass es für dieses Vorhaben bereits fertige Programme gibt. Allerdings möchte ich die Daten selbst in meinem Programm verwalten und dieses somit an meine Bedürfnisse anpassen.

Ich verwende derzeit SharpDevelop 4.4.1. Am liebsten wäre mir, wenn ich möglichst keine externen Klassen einbinden muss bzw. wenn ich deren Quellcode (OpenSource) abschnittsweise übernehmen und modifizieren könnte.

mfg
Franz


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (.NET) verschoben am Mo 19.05.2014 um 13:40
Moderiert von user profile iconTh69: Titel geändert ("C#" entfernt).


Th69 - Mo 19.05.14 15:50

Hallo und :welcome:

Hast du denn schon im Internet nach einigen Projekten gesucht?
Auf die Schnelle habe ich z.B.
Professional Tag Editor for MP3 (ID3) and WMA [http://www.codeproject.com/Articles/36856/Professional-Tag-Editor-for-MP-ID-and-WMA] (inkl. Source-Code)
Reading ID3 tags from a WMA file (MP3 as well) [http://www.codeproject.com/Articles/13328/Reading-ID-tags-from-a-WMA-file-MP-as-well] (scheint zwar VB.NET zu sein, aber kann ja einfach nach C# konvertiert werden)
gefunden.


rushifell - Mo 19.05.14 20:27

Wenn Du die Metadaten selbst auslesen möchtest, solltest Du Dir unbedingt die ASF Specification besorgen. Gibts auch als PDF zum Download. Dort wird genau erklärt, wie die Daten gespeichert sind. Suche einfach mal nach "ASF Specification PDF".

Der Aufbau ist relativ einfach und logisch, allerdings braucht es einiges an Einarbeitungszeit. Ich würde Dir auch eher dazu raten, wenn möglich eine bereits existierende Klasse zu verwenden, gerade wenn Du Daten schreiben möchtest.


Franz65 - Mi 21.05.14 00:48

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:

Hast du denn schon im Internet nach einigen Projekten gesucht?
Auf die Schnelle habe ich z.B.
Professional Tag Editor for MP3 (ID3) and WMA [http://www.codeproject.com/Articles/36856/Professional-Tag-Editor-for-MP-ID-and-WMA] (inkl. Source-Code)
Reading ID3 tags from a WMA file (MP3 as well) [http://www.codeproject.com/Articles/13328/Reading-ID-tags-from-a-WMA-file-MP-as-well] (scheint zwar VB.NET zu sein, aber kann ja einfach nach C# konvertiert werden)
gefunden.


Danke,

ja, das war der größte Teil des stundenlangen versuchens. Den Professional Tag Editor hab ich mir auch schon angesehen. Ich habe es bei meinen Versuchen jedoch nicht geschaft eine Klasse darin zu finden, welche ich verwenden könnte. Ich kann dies natürlich bei Zeiten nochmals versuchen. Manchmal kommt es vor, dass ich bei den ersten Versuchen Dinge übersehe. Ich hatte mir davon auch ein Example angesehen und wollte es testen. Es hat aber nicht richtig funktioniert. Es konnte die Daten lesen und gab vor diese auch bearbeiten zu können. Letzteres hat allerdings nicht funktioniert.

"(scheint zwar VB.NET zu sein, aber kann ja einfach nach C# konvertiert werden)", hab ich auch versucht, leider wenig erfolgreich. Dafür müsste ich doch WMAID3Tag irgendwie importieren oder einbinden.

Die ASF Specification habe ich schon, hat mir bisher nicht weitergeholfen. Zudem hatte ich gehoft, dass es eine Lösung gibt, die eine bestehende Klasse (OpenSource) zum lesen und schreiben verwendet.


Ich seh mir Do anything with ID [http://www.codeproject.com/Articles/17890/Do-Anything-With-ID] noch genauer an. Vielleicht löst das das Problem. Sieht aufs erste vielversprechend aus. Es ist jedoch schon zuspät für Versuche.

Guten Abend

Moderiert von user profile iconTh69: URL-Tags hinzugefügt


rushifell - Mi 21.05.14 18:57

Franz65 hat folgendes geschrieben:
Die ASF Specification habe ich schon, hat mir bisher nicht weitergeholfen.

Dort wird aber alles genau beschrieben ;-)

Die Metadaten werden in verschiedenen Abschnitten gespeichert, den Objekten. Eine WMA-Datei beginnt mit dem ASF_HEADER_OBJECT, das aus den einzelnen Header Objekten besteht. Die Anzahl der Header-Objekte ist im ASF_HEADER_OBJECT gespeichert. Ein Objekt besteht aus der Object ID (GUID 16 Byte Kennung), der Objekt Größe (8 Bytes) und dem Inhalt. Eine Liste der Object ID's findes Du im Abschnitt Top-level ASF object GUIDS. Hierbei musst Du die Byte-Reihenfolge beachten.

Im ASF_Content_Description_Object (einem Header Objekt) werden z.B. unter anderem Titel und Interpret gespeichert. Der genaue Aufbau steht wieder in der Spezifikation:

Quelltext
1:
2:
3:
4:
5:
GUID         - 16 Byte
Object Size  - 8 Byte
Title Length - 2 Byte
...
Title        - Title Length

Der Aufbau der anderen Objekte ist ähnlich. Für Bilder gibt es jedoch mehrere Möglichkeiten (mindestens zwei), diese zu speichern. Das sollte man beim Auslesen beachten.


Franz65 - Mo 26.05.14 16:01

Wenn ich wieder einmal dafür Zeit habe um es zu versuchen werde ich es wohl nochmals mit der ASF-Spezifikation probieren. Lieber wäre mir aber der Quellcode einer funktionierenden Klasse, welchen ich bei Bedarf anpassen kann. Mit byte- und bit-weißem auslesen kenne ich mich nämlich noch nicht wirklich aus.

mfg
Franz


Franz65 - Mo 26.05.14 21:40

Wäre echt schön, wenn jemand eine geeignete Klasse (OpenSource) kennen würde.

Danke


Ralf Jansen - Mo 26.05.14 21:57

http://id3.org/Implementations

Da sollte doch wohl auch was für dich dabei sein.


Franz65 - Di 27.05.14 22:23

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
http://id3.org/Implementations

Da sollte doch wohl auch was für dich dabei sein.


Danke für die Hilfe.

Das ist leider alles furchtbar unübersichtlich. Außerdem sind diese Klassen alle für MP3 und nicht WMA (zumindest soweit ich das gesehen habe).

Mir ists momentan zu blöd. Ich hab jetzt schon genug Zeit ohne nennenswertes Ergebnis investiert.

Vielleicht versuch ichs später wieder einmal.


mfg
Franz


Franz65 - Fr 01.08.14 13:55

Wäre nett eine Lösung zu finden.

Ich glaube, dass sich einige darüber freuen würden.

lg
Franz


Franz65 - Do 07.08.14 00:07

user profile iconFranz65 hat folgendes geschrieben Zum zitierten Posting springen:
Wäre nett eine Lösung zu finden.

Ich glaube, dass sich einige darüber freuen würden.

lg
Franz


Weiß wohl keiner weiter. WMA-Klasse zum Editieren von WMA-Tags müsste es doch geben.

Oder??????????


Franz65 - Do 14.08.14 17:42

Ich würde ja selber eine schreiben, wenn ich das nötige Wissen und auch die nötige Zeit dafür zur Verfügung hätte.


Franz65 - Di 30.09.14 22:01

Ist da jemand?


Palladin007 - Mi 01.10.14 00:49

Ich tippe mal darauf, dass keiner antwortet, weil du alle Infos hast, die du brauchst, aber scheinbar nicht die Zeit investieren möchtest, die nötig ist.
Zumindest ist das mein Eindruck und das kommt nicht gut an, besonders in Foren, wo wir alle freiwillig unentgeltlich und häufig sehr viel Zeit investieren.

Was das Thema angeht:
Ich verwette meinen Hintern darauf, dass es irgendwo im Internet passenden Bibliotheken für so ein populäres Format wie WMA gibt.
Ob es in dem genannten Link eine gute für C# gibt, da musst du selber schauen.

Im schlimmsten Fall musst du C++-Bibliotheken nutzen, aber das ist auch nicht soo schwer, wie es zuerst scheint. Du musst natürlich wissen, wie man die C++-Bibliothek nutzt, dann kannst du die Methoden mit P/Invoke [http://www.codeplanet.eu/tutorials/csharp/6-pinvoke-grundlagen.html] aufrufen. Das ist etwas umständlich, aber es geht. Ob das immer geht, kann ich dir leider auch nicht sagen, dafür fehlt mir die Erfahrung damit, am besten hilft dabei aber ausprobieren.


Allgemein bin ich im Internet (Suche: c# WMA Tags auslesen) ziemlich schnell fündig geworden:
http://www.codeproject.com/Articles/36856/Professional-Tag-Editor-for-MP-ID-and-WMA
http://www.codeproject.com/Articles/13328/Reading-ID-tags-from-a-WMA-file-MP-as-well
(So ziemlich jeder andere Link auch, ist zwar manchmal VB, aber der Unterschied ist soweit ich weiß nur syntaktisch)
Das ist auch open source, also passt alles. Verstehen musst du den Code aber auch selber.
CodeProject ist im übrigen eine Seite, die man sich merken sollte, da schwirrt gerne mal sehr nützlicher Code herum und ich habe bisher noch nichts gesehen, das nicht open source ist.



PS:
Hab gerade was gelesen von einer WindowsMediaPlayer-Klasse im .NET
Da kannst du ja mal schauen, es würde mich nicht wundern, wenn man den Windows Media Player irgendwie in C# nutzen kannst, es gibt ja auch für andere SOftware entsprechende Schnittstellen. Der IE ist so ein Beispiel.