Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Apr 18, 2024 19:16

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Thunderplayer
BeitragVerfasst: Sa Feb 26, 2005 22:00 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
So, nach längerer sehr inaktiver Zeit will ich hier nun auch mal was schreiben. Ironischerweise auch nichts was direkt mit OpenGL zu tun hat, aber so seht ihr wenigstens, dass ich DGL und Pascal nicht ganz vergessen hab. :wink:
Thunderplayer ist nichts weiter als ein kleiner Audioplayer, von denen es hunderte im Netz gibt. Ich hab den schon vor recht langer Zeit (~2000) geschrieben. Seit dem hat sich einiges verändert, doch seit 2000 sind alle Versuche ihn weiterzuentwickeln gescheitert. Nun habe ich mich also endlich aufgerafft und mir gedacht, ich könnte euch dann ja auch ruhig mal drüber auf dem laufenden halten. Basieren tut das ganze schon länger auf fmod, ganz am Anfang war es ElSound (Eldos) und dazwischen XAudio. Jedenfalls geht es jetzt auch ganz gut damit vorran, trotz der knappen Zeit. Am Ende bzw. eher zum Release soll er eine Medien-Datenbank haben, natürlich skins (die er schon immer besaß) und eben Audiowiedergabefunktionen. Gegenüber der letzten Version (3.1 oder sowas) wird die neue dann eben die Medien-DB haben und die Skins werden wesentlich flexibler. Bislang konnte man schon Fenster mit beliebieger Form erstellen und der Benutzer konnte einen Gammawert angeben. Letzendlich ließ sich damit schon sehr viel machen. Doch nun habe ich dem ganzen eine Scriptsprache spendiert, die auf DelphiC Tutorial aufbaut. Danke an dieser Stelle dafür. In wenigen Tagen - zum Glück hatte ich mir das schon einmal gründlich angeguckt vor etwa einem Jahr - hab ich diese noch um Boolean, String und Double-Variablen ergänzt. Was jetzt noch fehlt ist das integrieren der Funktionen des Players. Das sollte aber auch in wenigen Tagen erledigt sein. Bereits jetzt kann man beliebig viele Fenster mit beliebib vielen Buttons und Schriftzügen erstellen und es werden noch Fortschrittsbalken kommen.
Eine weitere Neuerung ist, dass das ganze auch nahezu 1-1 umgesetzt unter Linux läuft, einschließlich rahmenloser Fenster, etc. Bislang fehlt nur das Tray-Icon und das Popup-Menü bei Rechtsklick. Soviel zur Einleitung. Ich teil das ganze jetzt mal in die einzelnen Teile des Gesamtprojektes und werde euch natürlich im Rahmen eines Entwicklertagebuchs auf dem laufenden halten.

[Allgemein]
Programmiert ist das ganze in FreePascal. Es werden bislang nur die Standardunits System, SysUtils, Classes und Sockets genutzt. Zusätzlich noch Windows oder Xlib je nachdem ob es sich um die Windows oder Linux-Variante handelt.

[Skins]
Die Skins basieren grundsätzlich aus einer beschreibenden XML-Datei und den dazugehörigen Bildern. Das ganze wird dann von einem kleinen Kommandozeilenprogramm zu einem Skin zusammenkopiert, so dass man nur eine einzelne Datei weitergeben muss. Durch das XML-Format dahinter sollte der Player auch Skins älterer und neuerer Versionen laden können. Die Buttons haben je 3 Stati: normal, gedrückt (active) und Maus-darüber (hover). Zusätzlich gibt es ein Bild, das als Maske für die Form des Buttons dient. Jedem Button kann eine Funktion zugeordnet werden. Dabei kann es sich um eine integrierte wie "open_window(fenstername)" oder aber ein script wie "script:test" handeln. Dazu gibt es 2 Fenster, die immer vom Programm erstellt werden. Zum einen die Mediendatenbank und zum anderen ein Videofenster. Beide basieren auf einem Standardfenster, dessen Ränder, Hintergrundfarbe, Buttonfarbe, etc man im SKin angeben kann. Das Videofenster dient dann dazu Visualisierung (und da soll es welche auf OpenGL basierend geben) und eventuell später auch echte Videos darzustellen.

[Scriptsystem]
DelphiCs Tutorial zu einer Scriptsprache habe ich wie bereits gesagt um Boolean, Double und String Typen erweitert, denn diese Typen brauche ich für manche Funktionen. Leider arbeite ich da noch mit normalen Strings und nicht mit WideStrings, aber ich denke das wird sich noch ändern. Hat allerdings nicht eine so hohe Priorität.
Bislang kann man nur Bitmaps als Bilder verwenden. Es sollen aber noch JPEG, TGA und PNG folgen.

[Medien-Datenbank]
Von der Mediendatenbank her gefällt mir der Windows media Player eigentlich recht gut, auch wenn mich das automatische Bewertungssystem der Lieder da ein wenig nervt. Daher wird meine sich dort ein wenig unterscheiden. Ansonsten werden in dieser Datenbank Lieder als auch Playlisten abgelegt um daraus Playlisten erstellen zu können und einfach nach Titeln suchen zu können. Die Datenbank wird als einfache Datei mit einem record für jeden Eintrag abgespeichert. Im Speicher handelt es sich dann nur um ein Array mit Pointern zu den einzelnen Einträgen. Soll das ganze nun sortiert werden, muss ich nur die Pointer austauschen, nicht den ganzen Eintrag. Ansonsten ist das ganze halt einfach gehalten und es wird sich zeigen, wie es sich bewährt. Bislang fehlt dem ganzen noch die Oberfläche, so dass ich es noch nicht getestet habe.

[Sonstiges]
Zudem hat das Programm eine Updatefunktion, so dass es sich zum Server verbinden und nachgucken kann, ob eine neue Version vorhanden ist. Sollte dies der Fall sein, kann man sich die Änderungsliste angucken und bei Wunsch die neue Version herunterladen und installieren lassen. Dies funktioniert bis auf das Installieren bereits unter Windows und Linux.
Zudem versuche ich auf komplexe Installations und Deinstallationsprogramme zu verzichten. Dazu packe ich die Einrichtungsroutine in die Hauptanwendung, da diese nur eine Verknüpfung im Startmenü anlegen muss. Die Deinstallation ist bereits im Programm integriert und kann über den Paramter --uninstall aufgerufen werden. Mit dem zusätzlichen Paramter --silent gibt es keine Ausgabe und Nachfrage. Ansonsten wird ein Konsolenfenster gezeigt und um eine Bestätigung gebeten. Unter Windows kann man dann auf Wunsch auch die eigentliche Exe löschen lassen. Unter Linux fehlt diese Funktion noch.

[Momentane Arbeit an]
Zur Zeit arbeite ich an der Interaktion der Scriptsprache mit den Komponenten des Programms. Danach ist die Oberfläche der mediendatenbank an der Reihe, und dann sollte es auch eine kleine Previewversion geben. Screenshots kommen wohl in 3-4 Tagen. Was mir dabei einfällt: wenn einen die Lust dann packt, kann er gerne einen Skin erstellen. Im grafischen Bereich bin ich nämlich nicht gerade talentiert. :wink: Zur Zeit verwende ich noch ein paar Bilder des letzten Versuches.

So, sollte jemand jetzt Fragen zu dem ganzen haben oder vielleicht Hinweise, was ihn an Winamp, WMP und anderen immer störte, so kennt ihr ja alle die "Meinungen zu den Projekten" - Sparte hier. Bin für Kritik immer offen. Ich müsste z.Bsp. mal unbedingt ein Plugin für xmms suchen, dass die unterschiedlichen Lautstärken anpasst, aber bevor ich da suche baue ich das doch lieber selbst in den Thunderplayer ein... :)

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 27, 2005 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
[Skins]
Laden von Bitmaps korrigiert. Es fehlt aber noch dringend Unterstützung für monochrome Bilder.

[Script]
Strings können nun mit dem + Operator zusammengefügt werden.

[Allgemein]
Auslagerung einiger Codeteile in Inclde-Dateien zur Erhaltung der Übersichtlichkeit und besseren Wartbarkeit des gemeinsamen Codes von Linux und Windowsversion.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 01, 2005 22:45 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
[Skins]
-Das Fenster für die Mediendatenbank wurde anpassbar gemacht, hat allerdings noch immer keine echte Funktion. Dauert noch ein paar Tage...
-Skins werden nun mit paszlib komprimiert gespeichert und beim Laden entsprechend entpackt. Damit fällt das unnötige zippen später weg.

[Allgemein]
-Sicherheitsabfragen, damit das Programm auch auf schreibgeschützten Datenträgern läuft,
-sämtliche benötigte Daten und Dateien sind nun in der Programmdatei enthalten. Die meisten werden auch direkt in den Speicher geladen. Readme, DLL und beim Beenden des Programms die Einstellungen werden wenn möglich auf die festplatte gespeichert sofern sie dort nicht existieren. Das ganze Programm kann somit als eine einzelne Exe (bzw. Linux-Binary) weitergegeben werden. Ist zur Zeit ~340kb groß (Windows, upx gepackt).
-kleinere Bugfixes
-About-Dialog hinzugefügt

Momentan gibt es einige Rückstände in der Linux-Version. So fehlen dort noch einige der neuen Funktionen des Medien-DB Fensters und andere Kleinigkeiten. Konzentriere mich aber gerade auf die WIndows-Version, um endlich eine lauffähige Version hinzubekommen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 03, 2005 01:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Mal wieder einige Updates...

[Skins]
Ein paar neue Konfigurationsmöglichkeiten und Elemente hinzugefügt. Für Schriften fehlt noch die vollständige Implementierung, die sollte aber morgen erfolgen.

[Medien-DB]
Die Medien-Datenbank hat nun ein vernünftiges Fenster samt Anzeige der Datenbankeinträge. Es fehlen noch die Buttons und der Öffnen-Dialog, dann gibt es auch ne kleine Demo für euch (in der trotzdem verdammt viel fehlt).
Das Erkennen der ID3-Tags und weiterer Informationen wäre kein alzu großer Aufwand, ist aber trotzdem erstmal aufgeschoben, um die Demo fertig zu bekommen.

[Sonstiges]
Zudem hab ich heute ein Speicherleck gefunden. Ohne den Aufruf von FreeMem() verbrauchte das Programm einige MB weniger. :shock: Habe den Aufuruf daher durch Finalize() ersetzt und damit das Problem gelöst. Der Speichervrebrauch sank dadurch um etwa 45%. :!: Bin dabei nochmal alle anderen Stellen durchgegangen, bei denen Speicher allokiert wird. Der Speicher wird dort aber überall korrekt freigegeben.

Noch hängt die Linuxversion ein wenig hinterher, jedoch habe ich dort heute auch wieder einiges aufgeholt.
Zur Zeit fehlen dort:
-Fenster der Medien-Datenbank
-Popup-Menüs
-Tray-Icon
-Timer im About-Dialog
Die Demo-Version wird daher zunächst nur für Windows erscheinen. Ich hoffe die Linux-Nutzer hier können mir da nochmal verzeihen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 09, 2005 00:09 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
So, nach einigen Tagen voller Arbeit habe ich heute mal wieder Zeit gefunden mich dem Projekt zu widmen.

[Medien-Datenbank]
Die Mediendatenbank funktioniert nun soweit, dass man einzelne Dateien und auch ganze Verzeichnisse (auch rekursiv) hinzufügen kann. Nur fehlt dafür leider noch das Interface, sprich ein vernünftiger OpenDialog.
Außerdem werden jetzt auch ID3-Tags in version 1.1 eingelesen. Später wird auch Version 2 folgen.
Das Fenster der Medien-DB hat nun eine halbfertige Listview, die auf Doppelklick reagiert und die man vernünftig scrollen kann. Sortieren ist auch schon vorbereitet. Es fehlt allerdings noch das zeichnen der Spaltenköpfe und deren Resizing.

[Playlist]
Es ist jetzt auch möglich aus der Medien-Datenbank Dateien in eine Warteschlange zu packen, die dann nach und nach abgearbeitet wird. Momentan geht der Wechsel von einem zum nächsten Titel aber noch manuell. Die Automatik dahinter kommt demnächst. Abgespielte Titel werden in einer weiteren Liste verwaltet, so dass man diese auch nochmal abspielen kann. Fügt man eine ganze Playlist (bisher das m3u-Format) der Warteschlange hinzu, so werden statt dessen die einzelnen Lieder aus der Playlist hinzugefügt.

[Linux]
Das ganze läuft wieder auch unter Linux, dort fehlt aber noch die Listview und die Möglichkeit zum Verschieben der Fenster, sowie die weiter oben genannten Dinge.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 15, 2005 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Nach einer halben Ewigkeit habe ich mich gestern mal wieder an das Projekt gesetzt und an der Medien-DB gewerkelt sowie ein paar kleinere Bugs beseitigt. Sehr viel hat sich allerdings nicht wirklich getan in letzter Zeit. Ich mache mir gerade noch Gedanken, ob ich einen Teil der Fenster und Nachrichtenbehandlung nicht stärker Objektorientiert löse. An einigen Stellen ist das zur Zeit nämlich stark zusammengewürfelt. Nur macht da die teilweise etwas unterschiedliche Handhabung von X11 und Win32 ein wenig Probleme und so funktioniert es ja auch...

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 18, 2005 19:48 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Updates:

[Scriptengine]
Es gibt nun eine Interaktion von Scripten mit dem Programm. Erste Funktionen habe ich schon eingebaut und getestet. Man kann den Funktionen Paramter übergeben und sie liefern einen Wert zurück (oder halt void). Etwa die aktuelle Zeit der Wiedergabe oder die Werte aus dem ID3-Tag wie Titel oder Interpret. Man kann Scripte als Funktion aus dem Programm aufrufen wie auch etwa feste Funktionen wie next() oder play(). Diese Funktionen kann man Buttons zuweisen oder einem Ereignis. Ereignisse gibt es bislang 2 (Liedwechsel und Timer). Es werden da sicher noch einige folgen, wie etwa Skinwechsel oder Programmstart.
Zu Testzwecken habe ich das gleich mal dazu genutzt eine Anzeige der aktuellen Position im Lied auf einem Label auszugeben. Das kleine Script sieht so aus:
Code:
  1.  
  2. module ontime;
  3. var
  4.   String s;
  5.   Integer i, j;
  6. begin
  7.   if get_current_time > 0 then
  8.     i := get_current_time / 1000;
  9.     j := 0;
  10.     while i > 60 do
  11.       j := j + 1;
  12.       i := i - 60;
  13.     end;
  14.     s := inttostr(j)+':'+inttostr(i);
  15.     set_text('ltime',s);
  16.   end;
  17. end ontime;
  18.  

Allerdings gibt es z.Bsp. keine Funktion um eine Zeit formatiert auszugeben. Diese werde ich vermutlich schnell nachrüsten. Prinzipiell könnte man dies auch im Script erledigen, aber fester Code dürfte da doch schneller sein. Und die Funktion wird ja wahrscheinlich doch öfter gebraucht. Aufgerufen wird das ganze übrigens durch die Definition in der Skindatei:
<ontime>script:ontime</ontime>

Es fehlt noch einiges bis zu einer echten Demo, etwa der Öffnen-Dialog oder Buttons für die Medien-DB. Und auch die Labels sind noch nicht korrekt eingebaut. Wenn das aber geschafft ist, gibt es auch mal endlich was für euch zu sehen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 24, 2005 18:22 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
[Scriptengine]
Es wurden ein paar neue externe Funktionen hinzugefügt. Es fehlt aber noch die Übergabe von Parametern an Scripteigene Funktionen.

[Allgemein]
Habe schonmal crossover-fading eingebaut, was scheinbar auch richtig funktioniert. Muss da allerdings noch ein, zwei Sonderfälle testen.

Es steht allerdings noch immer die vernünftige Darstellung von Labeln und ein Öffnen-Dialog aus, bis es dann mal ne Preview gibt. Muss mich mal ein wenig ranhalten...

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 09, 2005 12:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Ersteinmal die letzten Änderungen, nachdem ich mich mal wieder an das Projekt gesetzt habe. Schön, wenn man mal wirklich wieder Zeit hat...

[Allgemein]
-Paramter --adddir=DIR hinzugefügt: mit diesem Parameter kann man einen Ordner zur Medien-Datenbank hinzufügen.

[Skins]
-Labels verwenden jetzt Bitmapfonts. Das hat den Vorteil, dass Skins auf jedem System und OS gleich aussehen und nicht von den installierten Schriften abhängig sind.

[Medien-DB]
-Sortierung der Spalten ändert nicht mehr den makierten Eintrag.
-Drücken eines Buchstabens lässt die Anzeige zu dem ersten Eintrag mit dem Buchstaben in der sortierten Spalte springen.
-Bugfix: ID3v1 Tags werden jetzt korrekt gelesen

[EDIT]
Wie ich eben entdeckt habe funktioniert das auslesen der Dauer und aktuellen Position im Lied nicht mehr richtig mit der aktuellen BETA von fmod, bzw. meiner Umsetzung. Werde versuchen, dass so schnell wie möglich zu beheben. Kommt daher ein wenig zu verfrühten Sprüngen, etc...
[/EDIT]

So und nun die guten Nachrichten: ich habe das Programm mal hochgeladen. Es besteht nur aus der einen Exe, die sobald ihr sie startet in ihrem aktuellen Verzeichnis die benötigten Dateien automatisch anlegt. Möchtet ihr diese Dateien und das Programm wieder löschen, müsst ihr nur die Dateien löschen, oder ihr ruft das ganze mit dem Parameter --uninstall auf.
Ein Lied könnt ihr abspielen, indem ihr entweder einfach den Dateinamen als Parameter übergibt, oder indem ihr mit dem oben genannten Parameter --adddir=DIR ein ganzes Verzeichnis samt Unterverzeichnissen nach MP3-Dateien durchsuchen lasst. Anschließend könnt ihr ein Lied einfach über die Medien-DB per Doppelklick starten.
Das ganze Programm findet ihr hier. Einen Screenshot gibt es natürlich auch endlich mal. Nur nicht über die Grafiken wundern, die habe ich mal auf die schnelle gemacht und bin da auch nicht sonderlich begabt drin. Wenn jemand will, kann er gerne sich einen eigenen Skin basteln. Eine Vorlage wie sowas aussieht gibt's hier: http://www.xxlsoft.com/downloads/thunderplayer/skin_vorlage.zip. Bei Skins ist zu beachten, dass die Bilder bisher als Bitmap im 24bit-Format vorliegen müssen. Die Bitmapfont ist ein 24bit-Bitmap mit 256x256 Pixeln und 16x16 Feldern. Dabei wird das erste Feld oben links dafür genutzt die Beite der Zeichen zu speichern. Es besteht ja aus 16x16 Pixeln. Ansonsten stellen die Felder jeweils die Zeichen des ANSI-Zeichensatzes von Zeichen 32 (Leerzeichen) an dar.
Einen Skin könnt ihr erstellen, indem ihr einfach das Programm mit dem Parameter --compileskin=dein\pfad\zum\skin.xml aufruft. Es werden dann die Daten in der xml-Datei verarbeitet und eine Skindatei erstellt. Dazu sollten alle benötigten Bilder im gleichen Verzeichnis wie die xml-Datei vorliegen.

Es sind sicher noch sehr viele Fehler vorhanden und vor allem die Medien-DB funktioniert noch nicht so ganz. Außerdem werden noch nicht alle Dinge die man in der xml-Datei für einen SKin angeben kann umgesetzt. Aber so langsam kann man erkennen, wo es hingehen soll. :roll:

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.038s | 17 Queries | GZIP : On ]