Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Multimedia-Tag

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 09.07.2009, 21:04    Titel: Multimedia-Tag Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 09.07.2009, 22:59    Titel: Antworten mit Zitat

EXIF wäre noch nützlich lächeln um .JPG's zu anonymisieren
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 09.07.2009, 23:03    Titel: Antworten mit Zitat

Mich würde eher version 0.8.2 mit mod-unterstützung interessieren. Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 10.07.2009, 19:51    Titel: Antworten mit Zitat

@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 happy [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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.07.2009, 20:22    Titel: Antworten mit Zitat

Wünsche hab ich direkt keine, ich war nur eher überrascht happy 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. lächeln
Code ist hier: happy 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 happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 07.08.2009, 00:29    Titel: Antworten mit Zitat

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... lächeln

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. lächeln
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 07.08.2009, 15:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 07.08.2009, 18:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2009, 01:56    Titel: Antworten mit Zitat

BTW: Nach ISO-639-2 ist "deu" keine gültige sprache happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 29.08.2009, 16:05    Titel: Antworten mit Zitat

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? durchgeknallt
</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 zwinkern
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.08.2009, 16:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 29.08.2009, 16:28    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 29.08.2009, 16:54    Titel: Antworten mit Zitat

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...). lächeln

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. verwundert 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. lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.08.2009, 17:13    Titel: Antworten mit Zitat

Naja alles was von deinem Programm geschrieben wurde (Mustergenerierung) und die vielen Properties... wie Sebastian schon sagte...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 29.08.2009, 17:36    Titel: Antworten mit Zitat

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 lächeln ).
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz