 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 09.07.2009, 21:04 Titel: Multimedia-Tag |
|
|
Es kennt sicher jeder von euch die Zusatzinformationen ("Tags"), die in MP3, WMA, OGG, etc. Dateien gespeichert sind. Ich habe ein kleines Programm geschrieben, dass diese Tags auslesen, ändern und entfernen kann.
Derzeit werden folgende Tag-Formate unterstützt:
- ID3v1 (Version 1.0 und 1.1)
- Lyrics3 (Version 1 und 2)
- ID3v2 (Version 2.3 und 2.4)
- APE (Version 1 und 2)
- ImpulseTracker (nur Lesen)
- EXIF
- IPTC
- XMP
Weitere Formate wie ASF-Streams (WMA, WMV, etc.), OGG-Streams mit Vorbis Comments (OGG, FLAC, SPX, etc.) sowie verschiedene Informationen aus den Dateiformaten MOD, S3M, XM und IT werden von Version 0.8.2 bereits unterstützt und müssen noch in das Klassenähnliche Konzept der 0.9.x Versionen umgeschrieben werden. Diesen Dateien habe ich wegen der relativ geringen Häufigkeit geringere Priorität als der Implementierung von ASF und OGG Vorbis zugeordnet.
Download der aktuellen Version:
Multimedia-Tag 0.9.3 Beta
Multimedia-Tag 0.9.3 Beta (in Module aufgeteilt)
Ältere Versionen:
Multimedia-Tag 0.9.1
Ich habe zwar bereits umfangreiche Tests durchgeführt, aber dennoch kann ich nicht garantieren, dass die Software Fehlerfrei ist. Ich übernehme keine Haftung für jegliche Schäden, die mit meinen Produkten in Verbindung gebracht werden könnten.
Bitte testet mein Programm etwas mit einer Kopie eurer Musikdateien (nicht das Original, ich kann nicht garantieren, dass die Software zu 100% fehlerfrei ist). Ich bin schon auf eure Meinungen und Erfahrungen mit dem Programm gespannt.
Für Funktionen, die in der FB-RTL fehlen greift das Programm auf die Win32-API zurück und funktioniert deswegen nicht ohne Änderungen in anderen Betriebssystemen. Ich werde aber Alternative Funktionen suchen / schreiben, die auch unter anderen Betriebssystemen funktionieren. Für Linux sollte Wine durchaus ausreichen, um das Programm zu testen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Zuletzt bearbeitet von St_W am 29.08.2009, 17:50, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 09.07.2009, 22:59 Titel: |
|
|
EXIF wäre noch nützlich um .JPG's zu anonymisieren _________________ www.piratenpartei.de |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.07.2009, 23:03 Titel: |
|
|
Mich würde eher version 0.8.2 mit mod-unterstützung interessieren.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 10.07.2009, 19:51 Titel: |
|
|
@Devilkevin: Gute Idee. Ich werde mich (sobald ich Zeit habe) mit der Spezifikation näher befassen und versuchen auch dies zu implementieren.
@Jojo: Alle Versionen vor der 0.9er Reihe haben die ausgelesenen Informationen nur auf dem Bildschirm ausgegeben und nicht gespeichert. Zuviel darfst du dir von der Unterstützung von MOD, S3M, XM und IT nicht erwarten - mein Programm wird voraussichtlich nur grundlegende Eigenschaften wie Titel, Kommentare, Instrument-Namen, Sample-Namen und ähnliche Auslesen und (wenn möglich) auch schreiben können (ich will ja nicht den OpenMPT nachprogrammieren [Mit dem ich übrigens die ausgelesenen Ergebnisse bzw. die Korrektheit einer Datei nach einem Schreibvorgang überprüfe] ). Außer du hättest einen bestimmten Wunsch, was und welche Dateiformate / Informationen aus den Dateien gelesen/interpretiert werden können sollen - dann bin ich natürlich gern bereit dies umzusetzen (Möglichkeit vorausgesetzt).
Ich selbst hab mir folgende Liste der Dateiformate aus dem Bereich der Trackermodul-Dateien zusammengestellt (Stand: 02.02.2009):
Code: | MOD X X Protracker
IT X X ImpulseTracker
XM X X FastTracker
AHX -
MED X
MTM X MultiTracker
S3M X X Screamtracker 3
MO3 -
669 X Composer 669
HVL -
STM X ScreamTracker
^ MM-Tag Unterstützung
^ OpenMPT Unterstüzung |
Das ImpulseTracker Format (IT) hab ich übrigens schon fast fertig in die 0.9.2er Version migriert.
An alle anderen: Ich bin offen für jegliche Wünsche / Anregungen / Beschwerden und versuche diese bestmöglich umzusetzen (sofern möglich). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.07.2009, 20:22 Titel: |
|
|
Wünsche hab ich direkt keine, ich war nur eher überrascht Ansonsten ist der OpenMPT ja quelloffen, da kannst du dich gerne inspirieren lassen.
Bei MO3 (das unterstützt der OpenMPT übrigens inzwischen) wird das Auslesen und vor allem das Schreiben sehr kompliziert, da das Format "eigentlich" nicht quelloffen ist. Außer dem Original-Tool zum Erstellen von MO3s ist mir kein anderes "Schreibtool" bekannt. Es gibt einen Quellcode, der unter der GPL steht, der MO3-Dateien lesen kann, vielleicht hilft dir das weiter... http://gnu.ethz.ch/debian/unmo3/
Ich benutze eine für OpenMPT zurechteschnittene Bibliothek, um MO3s auszulesen, da kann ich also nicht weiterhelfen.
Ich kann außerdem noch frischen Support für GDM-Dateien anbieten (GDM ist das Format der BWSB-Library, die in einigen QB-Spielen sowie MegaZeux verwendet wurde), denn ich hab letztens für OpenMPT einen Loader für das Format programmiert. War ziemlich viel Arbeit, aber ich kann nun mit großer Sicherheit behaupten, dass er der präziseste Loader für dieses Format ist - BWSB mal ausgenommen.
Code ist hier: http://modplug.svn.sourceforge.net/viewvc/modplug/trunk/OpenMPT/soundlib/Load_gdm.cpp?view=log
Zitat: | Zuviel darfst du dir von der Unterstützung von MOD, S3M, XM und IT nicht erwarten |
Naja, was soll es denn sonst noch großartig tun? Den Rest erledige ich mit OpenMPT  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.08.2009, 00:29 Titel: |
|
|
Habe grade noch mal in deinem Sourcecode gewühlt, da mein ID3v2-Tagwriter im OpenMPT nicht ganz funktioniert hat und mir ist da eine kleine Sache aufgefallen, die du nicht ganz richtig machst...
Laut ID3v2-Spezifikationen ist das COMM-Feld wie folgt aufgebaut:
- Encoding-Byte
- 3 byte Sprachspezifikation nach ISO-639-2
- Kurze Beschreibung des Inhalts
- Je nach Enkodierung (siehe erstes Byte) 1x oder 2x Null
- Eigentlicher Text
Mir ist kein Tagwriter bekannt, der wirklich diese Kurzbeschreibung verwendet, aber zumindest beim Auslesen würde ich auf Nummer sicher gehen.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 07.08.2009, 15:18 Titel: |
|
|
Ich habe mich in letzter Zeit mit EXIF und VorbisComments beschäftigt, und nicht mehr an ID3v2 gearbeitet, aber ich dachte ich hätte das genauso implementiert - und zwar sollte die "Klasse" ID3v2CommentFrame eigentlich genau diese Arbeit erledigen.
Weißt du noch, wo dir der Fehler aufgefallen ist? Möglicherweise hab ich irgendwo die obige Klasse vergessen. Jedenfalls bin ich natürlich dankbar für jeden Fehler, der entdeckt wird.
Übrigens habe ich nicht alle Frame-Typen des ID3v2 Standards implementiert, sondern nur die in der Praxis relevanten. Genau dasselbe gilt übrigens auch für das Thema "Unsynchronisation" - eigentlich sollte das ja auf die ganze Datei angewandt werden, nur viele Wiedergabeprogramme können den (laut Standard völlig korrekten und mit Programmen wie MP3Tag ohne Probleme lesbaren) Tag nicht mehr lesen. Darum ließt mein Programm jetzt zwar Tags mit "Unsynchronisation" korrekt ein (was mit einiger Testarbeit verbunden war, da der 2.3 und 2.4 Standard an manchen wichtigen Stellen komplett inkompatibel zueinander sind und zwischen Standard und Praxis teilweise ein großer Unterschied besteht), aber schreibt die Tags derzeit ohne diese Funktion vorher anzuwenden.
Ich habe weiters die aktuelle Version hochgeladen, wobei ich aber stark betonen muss, dass sich diese noch im Entwicklungsstadium befindet (EXIF und VorbisComments):
http://wurzinger.bplaced.net/files/programmierung/projekte/MM-Tag/Multimedia-Tag%200.9.3%20Pre-Release%2001.bas _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.08.2009, 18:10 Titel: |
|
|
Wo aufgefallen? Ich hab den Sourcecode nicht direkt vor mir, aber du verwendest für das COMM-Field ein TYPE, das ein Integer-Feld enthält - das Integer-Feld enthält die Länderbuchstaben nach ISO (z.B. "deu" in deinem Fall) und die nachfolgende Null - Beim Schreiben ist das OK, beim Lesen muss aber beachtet werden, dass nach den drei Buchstaben zuerst ein beschreibender Text, dann ein oder zwei NULL-Zeichen folgen (je nach Zeichenset) und dann der eigentliche Kommentar folgt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2009, 01:56 Titel: |
|
|
BTW: Nach ISO-639-2 ist "deu" keine gültige sprache  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 29.08.2009, 16:05 Titel: |
|
|
Inzwischen ist mein Projekt Multimedia-Tag wieder um einiges gewachsen und unterstützt jetzt auch die Metadaten-Formate EXIF, IPTC und XMP. Alle drei können derzeit nur in JPEG gelesen / geschrieben / entfernt werden. Weitere Dateiformate, wie z.B. TIFF sind geplant. Für XMP, welches ja in unzählige Dateien eingebunden werden kann, sind ebenfalls weitere Dateiformate geplant.
Aus Impulse Tracker Dateien können Titel, Kommentare und einige wichtige Informationen ausgelesen werden. Weitere Funktionen und Formate dieser Art werden derzeit noch nicht unterstützt, da ich diesen (wegen ihrer geringen Häufigkeit) geringe Priorität zugeordnet habe.
Weiters wurden wenige kleine Fehler behoben.
Eine graphische Oberfläche zum Bearbeiten der Dateien ist geplant, aber ich weiß noch nicht recht welche GUI-Bibliothek ich verwenden soll (Win32-API gibts nur unter Windows, GTK sieht schlecht aus und WxWidgets hat einen schlechten veralteten FB-Wrapper)
Beispiele sind dieses Mal leider noch nicht dabei, da ich einfach keine Zeit dazu hatte und ich meine eigenen Testprogramme wegen ihrer Qualität nicht veröffentlichen möchte (sie würden wahrscheinlich auch nichts bringen, da man sich dabei mit den Meta-Formaten schon ziemlich genau auskennen muss).
Ab morgen, Sonntag, bin ich dann eine Woche lang in Griechenland und kann deshalb wahrscheinlich nicht in dieser Zeit antworten.
Auf eure Kommentare bin ich natürlich schon gespannt.
Achja: Dowload im ersten Thread oder hier:
Multimedia-Tag 0.9.3 Beta
@Sebastian:
Sebastian hat Folgendes geschrieben: | <OffTopic>
St_W hat Folgendes geschrieben: | z.B. mein aktuelles Projekt "Multimedia-Tag" mit knapp 11.000 Zeilen in der aktuellen Entwicklungsversion |
11.000 Zeilen für ein FreeBASIC-Programm (also kein ASM-Code mit 1 Instruktion pro Zeile) zur Behandlung von Audiodateitags?! Hast du da die Lutherbibel als Kommentare eingearbeitet?
</OffTopic> |
Inzwischen sind es knapp 12.000 Zeilen (davon nur sehr sehr wenig Assembler) und du kannst dir selbst ein Bild davon machen wie viele Bibelseiten in meinem Programm als Kommentare vorkommen  _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Zuletzt bearbeitet von St_W am 29.08.2009, 16:21, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 29.08.2009, 16:17 Titel: |
|
|
Beim Rüberscrollen würde ich spontan sagen, dass sich 30-40% durch Präprozessorspielereien sparen lässt.
Schonmal an Module gedacht?
12.000 Zeilen in einer Datei sind einfach nur... bäh...
Nimm dir FBEdit und mach daraus ein vernünftig Organisiertes Projekt mit mindestens einem Modul pro Dateiformat.
So kann und wird sich niemand deinen Sourcecode anschauen.
Außerdem keine Kommentare außer die ersten paar Zeilen... |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 29.08.2009, 16:28 Titel: |
|
|
@28398: Ja, Teile des Programms in eigene Dateien ausgliedern, daran hab ich schon gedacht. FBedit verwende ich übrigens (Ich brauche die Codevervollständigung und die Funktions-, UDT-, .. Liste ständig)
Makros verwende ich übrigens auch, aber nur in begrenztem Umfang, da dadurch keine Codevervollständigung durch FBedit mehr möglich ist. Ich muss aber dazusagen, dass manche Programmteile nicht handgeschrieben, sondern von einem von mir geschriebenen FreeBasic Programm erzeugt worden sind.
Welche Programmteile könnte man deiner Meinung nach durch Makros um diese 30-40% verkürzen? (ein paar Zeilennummern wären ganz nett, damit ich sehe welche Programmteile du meinst) _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 29.08.2009, 16:54 Titel: |
|
|
Jui, ich hatte mir, um ehrlich zu sein, den Source noch gar nicht angeschaut und schon mal vorab die ungläubige Bemerkung gemacht, aber der ist ja tatsächlich enorm lang (und das ganz ohne Bibelkommentare...).
Ab Zeile 1201 hätte ich die vielen CASE-Zeilen durch eine externe Datei gespart, aber das ist wohl Geschmackssache. Die besondere Länge bekommt der Source ja durch die vielen, vielen Properties. Die hätte ich da vielleicht gar nicht verwendet, sondern stattdessen nur pro Datentyp eine Sub zum Setzen und eine Funktion zum Holen der Daten. Das zu lesende/setzende hätte ich denen dann als STRING-Argument übergeben. OK, das ist dann weniger komfortabel, aber damit könnte man einiges an Code sparen.  _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 29.08.2009, 17:13 Titel: |
|
|
Naja alles was von deinem Programm geschrieben wurde (Mustergenerierung) und die vielen Properties... wie Sebastian schon sagte... |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 29.08.2009, 17:36 Titel: |
|
|
So ich habe jetzt den riesenlangen Quelltext in mehrere Dateien aufgeteilt.
Das Ergebnis ist hier zu finden:
Multimedia-Tag 0.9.3 Beta (in Module aufgeteilt)
Ich musste gerade feststellen, dass man die "Declare Property"s gar nicht ausgliedern kann. Ich wollte das nämlich so machen:
Main.bas
Code: | type hallo
public:
#include "decl.bas"
private:
a as Integer = 2
end type
property hallo.zwei as Integer
return this.a
end property
Dim Hi as hallo
print hi.zwei
sleep |
decl.bas
Code: | declare property zwei as Integer |
Gibt es da eine andere Möglichkeit oder muss ich den gesamten "Type hallo" ausgliedern?
@sebastian: Die Properties hab ich eben nicht alle selbst geschrieben, sondern nur die Titel und ggf. ein paar Parameter. Ein anderes Programm von mir erzeugt mir dann daraus die Declare's und Properties. Für XMP ging das z.B. nicht, da es komplizierter ist, als z.B. IPTC. Da hab ich mit Notepad++ Makros gearbeitet, um mir wenigstens ein wenig Tippaufwand zu sparen.
Properties sind nämlich praktischer als Makros oder eine Funktion mit String-Parameter, weil die Properties von der FBedit Code-Vervollständigung aufgelistet werden (Man kann sich ja unmöglich die Unmengen an Namen merken, dabei hab ich noch nicht einmal alles implementiert...aber das kommt noch ). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|