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

Aktuelle Zeit: Do Okt 22, 2020 13:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Fr Apr 02, 2010 21:12 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
In den letzten beiden Tagen habe ich ein wenig an Audorra herumgebastelt. Nun ist ein System hinzugekommen, mit dem Hindernisse im Raum verteilt werden können. Audorra berechnet mittels Raytracing, inwiefern Objekte zwischen Hörer und Tonquelle liegen und schwächt die Verstärkung der Tonquelle entsprechend ab.

Momentan wird dabei leider noch nicht die Abschwächung einzelner Frequenzen der Tonquelle durch die Materialien berücksichtigt, was dem Ganzen jedoch zu weitaus realistischerem Klang verhelfen sollte. Dies einzubauen ist mein nächster Schritt.

Der Plan für die Zukunft sieht folgendes vor: Mein momentaner Algorithmus ist (bezogen auf Grafik) mit Raytracing mit hartem Schattenwurf zu vergleichen (stellt man sich jede Tonquelle als Licht vor). Um eine realistische Tonumgebung zu schaffen möchte ich "Reflektionen/Streung" an den Wänden der Räume simulieren und somit (mehr oder weniger) "Global Illumination" realisieren. Meine aktuelle Idee sieht vor, für jeden Emitter rekursiv einige Teststrahlen auszusenden (16, bei jedem Kind entsprechend weniger) und an jedem Kollisionspunkt einen "Kindemitter" zu setzen. Solange die Szene statisch bleibt (d.h. die Raumgeometrie verändert sich nicht, keine Emitter werden verschoben), können alle Kindemitter im Speicher behalten werden. Da sich jedoch pro Emitter ca. 40 oder mehr Kindemitter bilden werden, muss ich mir noch einiges an Optimierung für meinen Renderer einfallen lassen.

Im Anhang ist ein aktuellen Bildschirmfoto meiner "Soundscape" Demo-Anwendung.


Dateianhänge:
soundscape_walls.png [20.11 KiB]
Noch nie heruntergeladen

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 25, 2010 19:50 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Hallo,

mein Plan bezüglich Audorra hat sich in den letzten Wochen etwas geändert: Nachdem einige Tests unter Linux gezeigt haben, dass mein Filtergraphsystem alles andere als stabil läuft (sporadische Abstürze bei State-Changes etc.), vermutlich durch einige kleinere Unsauberheiten bei der Synchronisation zwischen den Threads, habe ich mich entschieden das Filtergraphsystem (welches auch vergleichsweise limitiert war) neu zu schreiben (wer sich unter dem Begriff Filtergraph nichts vorstellen kann, der sei erstmal auf Wikipedia verwiesen: http://en.wikipedia.org/wiki/Filter_graph).

Neue Struktur des Filtergraphs
Das Neuschreiben ist nun in den Grundzügen geschehen. Im Gegensatz zum alten Filtergraphsytem kennen nun beide Filter einer Verbindung ihre Partner und können beim Freigeben eines Filters entsprechend notwendige Aktionen durchführen. Vorher war die einzige Verbindung zwischen den Filtern eine Callback-Funktion, eine Objektreferenz wurde nie ausgetauscht und die Filter mussten somit in einer festen Reihenfolge freigegeben werden.
Die Basisfilterklasse verfügt (ähnlich wie die TAdSprite-Klasse von Andorra 2D) über mehrere protected "Do"-Methoden, die von den Kindern überschrieben werden müssen. Hierdurch kann ich die gesammte Thread-Synchronisation etc. zum großen Teil in dieser Klasse durchführen und habe somit einen Single Point of Failure, bzw. spare mir einigen Code der vorher Redundant war.

Dynamisches Austauschen von Filtern
Zudem unterstützt mein Filtergraphsystem nun das dynamische austauschen von beliebigen Filtern während des Betriebs. Somit kann sogar der Ausgabetreiber (sprich das Audiobackend (Libao, DirectSound, WASPI) und/oder das Ausgabegerät (sprich die Soundkarte oder Verbindung)) dynamisch zur Laufzeit des Filtergraphs ausgetauscht werden.

Der Filtergraph wird während der Wiedergabe in einen festen zustand gebracht (mittels der neuen Initialize Funktion) und kann mit einem einfachen Finalize komplett beendet werden. Um Filter dynamisch zu entfernen, muss der Filtergraph angehalten (Suspend) und nach den Änderungen wieder aufgenommen werden (Resume). Folgender, kurzer Code, zeigt das austauschen des Audio-Backends (der jeweils letzte Filter des Filtergraphs muss bei den Aufrufen von Suspend und Resume verwendet werden):

Code:
flt_drv2 := TAuDriverOutputFilter.Create(strdrv2, 16); //Erzeuge einen neuen Ausgabetreiberfilter mit 16 Bit Bittiefe

flt_drv1.SuspendFiltergraph; //Halte den Filtergraph an
try
  flt_dec.Target := flt_drv2; //Verbinde den Dekoderfilter mit dem neuen Ausgabefilter
  FreeAndNil(flt_drv1); //Gebe den alten Filter frei
finally
  flt_drv2.ResumeFiltergraph; //Lasse den Filtergraph weiterlaufen
end;
flt_drv2.Play; //Starte die Wiedergabe des neuen Ausgabefilters


Pull statt Push
Zudem habe ich die Audiobackends umstrukturiert: Sie warten nun nicht mehr darauf, dass ihnen freiwillig Daten gegeben werden (Push), sondern ziehen (Pull) die Daten über ein Callback direkt. Ich hoffe, dass dies mir Hilft die Latenzzeit mit einigen Audiobackends zu verbessern.

Puh, ich hoffe das hier ließt irgendjemand, ich lade die Änderungen ins SVN sobald alles wieder stabil läuft (kann noch ein paar Wochen dauern). Dann wird es auch Audorra Version 0.6 geben.

Ich freue mich über jeden Kommentar,
Andreas

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jun 13, 2010 17:29 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Hallo,

ich bin nun recht weit mit der Umgestaltung fortgeschritten, lediglich der AuLibao und der AuWASPI-Audio-Treiber müssen noch (wie oben beschrieben) umgeschrieben werden. Bis jetzt macht das ganze System unter Linux einen recht stabilen Eindruck, einige Probleme konnte ich mit der Hilfe von valgrind's memcheck und helgrind aufspüren und beheben.

Aktuelle Versionen gibt es im SVN-Archiv.

Andreas

Edit: Meine Simple-Player-Demo läuft jetzt schon für eine Woche als ständiger Begleiter unter Linux ohne abzustürzen. Lediglich zwei Bugs stören mich noch: 1. Die Längenberechnung für MP3s funktioniert seit irgendeiner Version von FFMpeg nicht mehr richtig; 2. Das Seeken in einer Datei funktioniert nicht mehr, sobald diese komplett abgespielt worden ist. Diese Fehler muss ich unbedingt noch beheben...

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 28, 2010 20:25 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Hallo,

nachdem ich nach dem umbauen meines Libao-Drivers trotz aktualisieren auf die neuste Version auf ein paar Probleme gestoßen bin, habe ich mich zu dem gewagten Schritt entschieden noch einen Treiber für ALSA zu entwickeln. Meine Wahl viel auf ALSA, da dies die native Kernel-Schnittstelle ist und auf so gut wie allen Linux-Systemen verfügbar ist. Außerdem ist die ALSA-Schnittstelle meiner Meinung nach einiges einfacher zu implementieren gewesen.

PulseAudio ist meinen Recherchen nach immer noch unter anderem nur bei Ubuntu/Gnome als Default installiert. Dort ist zwar die Client-ALSA-Schnittstelle nur über PulseAudio emuliert. Der Audio Pfad sieht mit PA also folgendermaßen aus:
Code:
Audorra -> ALSA Emulation -> PA -> ALSA -> Kernel -> Hardware

Ohne PA sieht der Pfad folgendermaßen aus:
Code:
Audorra -> ALSA -> Kernel -> Hardware


Der neue Audorra ALSA-Treiber ist nun der erste, der das neue Audorra-Audio-Treiber Interfacedesign voll ausnutzt. Latenzzeiten von 5-10ms sind gut damit (inklusive PA ALSA Emulation) machbar.

Der verwendete ALSA Header und Treiber (AuALSA) ist im SVN-Repository.

Andreas

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 27, 2010 10:59 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Dokumentation und Website

In der letzten Zeit habe ich mich recht wenig zu Wort gemeldet und auch keinen Fortschritt an meinen Projekten gezeigt. Dies liegt zum einen daran, dass ich in der letzten Zeit einiges um die Ohren hatte/habe und zum anderen, dass ich vor einem neuen Release eines meiner Projekte a) das neue Dokumentationssystem fertig haben wollte (was hier zu besichtigen ist) und ich b) die Websites aller meiner Projekte vereinheitlichen will.

Momentan habe ich folgende Websites:
  • Andorra 2D - Verwendet ein Eigenbau-CMS welches ich mal für die Homepage meiner Schule geschrieben hatte
  • Audorra - Verwendet XML-Dateien auf dem Server die via PHP transformiert werden
  • Acinerella - Eine einzelne HTML-Datei auf dem Server
  • Ein Mediawiki im Andorracommons Projekt von SF, welches aber unverwendbar langsam ist.

Ich war lange auf der Suche nach einem entsprechendem fertig-System und habe mich mit allerlei Wiki-Software rumgeschlagen. Doch leider war ich mit keiner so richtig zufrieden und/oder sie lief nicht richtig auf dem SF-Server. Also habe ich mich auch hier an eine selbst-bastel-Lösung gemacht.

Folgende Punkte waren mir wichtig:
  • Verwaltung mehrere Projekte
  • Inline-Editing von Beiträgen
  • Wiki und Website in einem
  • Versionierung aller Beiträge
  • BB-Code Unterstüzung
  • Geschwindigkeit und geringe Größe
  • Rechtemanagement
  • Unterstützung für mehrere Sprachen und Unicode

Ich habe schon fast alle Punkte umgesetzt und auch ein relativ lesbares und übersichtliches Design gebastelt. Für die Verwaltung der Benutzer/Gruppen/Kategorien habe ich mich entschieden keine Oberfläche zu schrieben sondern das direkt in PHPMyAdmin zu machen - die Gruppen stehen alle schon fest und ein neuer Benutzer ist mit einem Insert hinzugefügt.

Auch wird man nicht in der Lage sein, sich über ein Web-Frontend zu registrieren, ich denke, dass die Methode eine persönliche E-Mail an mich zu schreiben eine recht hohe Schwelle für Bots oder mutwillige Zerstörung bietet (funktioniert hier im Wiki ja auch recht gut).

Mir fehlen nur noch einige "Kleinigkeiten" wie die Verlinkung zwischen Artikeln, Caching, funktionierende Links im Layout und jede Menge Testen.

Leider habe ich das ganze Projekt in PHP geschrieben und ich bin mir ziemlich sicher, dass das das letzte war, was ich freiwillig in PHP gemacht habe. Mich nervt die fehlende Typisierung, inkonsitente Funktionsaufrufe, quasi nicht existente Callbackfunktionen und die Tatsache, dass das Ganze nicht in Byte-/Maschinencode kompiliert wird und einem dabei aussagekräftige Fehlermeldungen/Warnungen liefert. Werde in Zukunft entweder auf CGI-Programme in FreePascal oder Python umsteigen.

Da ich in den nächsten Tage keinen PC habe wird es aber wohl trotzdem noch ein paar Wochen dauern bis das Ganze fertig ist. Außerdem muss ich noch alle Artikel von allen Websites dort einstellen und in der Datenbank entsprechend datieren.

Audorra an sich sollte einsatzbereit sein und ich werde bis zum Release (welches ich zusammen mit Acinerella erst dann mache, wenn der andere Kram fertig ist) nichts mehr verändern. Das SVN-Archiv ist also ohne Probleme zu verwenden.

Andreas

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.030s | 18 Queries | GZIP : On ]