DGL https://delphigl.com/forum/ |
|
Audorra - Digitale 3D Audiobibliothek https://delphigl.com/forum/viewtopic.php?f=13&t=8819 |
Seite 1 von 2 |
Autor: | igel457 [ Sa Nov 21, 2009 20:06 ] |
Betreff des Beitrags: | Audorra - Digitale 3D Audiobibliothek |
Audorra - Digitale 3D Audiobibliothek Was ist das, bzw. was wird es werden? Audorra ist eine Cross Plattform Audiobibliothek für Pascal, die es ermöglicht Musik und Soundeffekte in Spielen (oder anderen Audio-Anwendungen) wiederzugeben. Dabei liegt volle Unterstützung für 3D-Surround Sound und Positionierung von Audioquellen im 3D-Raum vor. Audorra ist modular aufgebaut: Sowohl die Ausgabebibliothek ("driver", also z.B. WaveOut, DirectSound oder OpenAL) als auch die Decoder können über ein Pluginsystem statisch oder dynamisch gelinkt werden. Warum dieses Projekt? Audorra soll als Ergänzung zu meiner 2D-Grafikbibliothek Andorra 2D und zu meiner Medienbibliothek Acinerella gesehen werden. Außerdem ist für Pascal abgesehen von ACS (welches keinen 3D Sound unterstützt) keine OpenSource Audiobibliothek vorhanden, oftmals wird FMOD oder die BASS verwendet - ein Misstand, der schleunigst behoben werden sollte. Unterstützte Betriebsysteme/Compiler: -Windows 2000, XP, Vista, 7 -Linux (momentan nur über OpenAL/Libao) -Delphi 7 (?), 2005 (?), Turbo Delphi 2006, 2007 (?), 2009 (?), 2010 (?) -Freepascal/Lazarus (aktuelle Version) Features/Todo:
Screenshots: Screenshots der einfachen Audio-Wiedergabe Demo: 3D-Sound-Demo: Website: Mehr Infos und aktuelle Neuigkeiten, sowie einen Link auf das SVN-Repository, findet ihr auf der offiziellen Audorra Website: http://audorra.sourceforge.net/ Um den Sourcecode aus dem SVN-Repository zu compilieren wird zudem eine aktuelle Version der Andorra Commons benötigt aus dessen SVN-Repository benötigt: http://sourceforge.net/projects/andorracommons/develop Lizenz: Das ganze Projekt ist unter der MPL lizenziert. Die GPL oder die LGPL dürfen aber ebenfalls verwendet werden. Verwendete 3rd-Party Bibliotheken/Header: OpenAL-Header von Noeska FFT-Analyse von Nils Haeck Synapse-Netzwerkbibliothek DirectX-Header von Clootie Viel Spaß damit, ich bin auf eure Reaktionen gespannt, Andreas |
Autor: | igel457 [ Sa Nov 21, 2009 22:45 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
It's done in Software Nein, der 3D-Audioteil von Audorra verwendet nicht OpenAL, sondern einen eigenen 3D-Audio Softwarerenderer. Diese Neuigkeit schockiert vielleicht den einen oder anderen - Doch die Gründe dafür sollten recht einleuchtend sein:
Alle Besitzer von Edelsoundkarten werden nun vermutlich aufschreien, da sie keinen Vorteil daraus ziehen können (abgesehen von guten D/A-Wandlern). Pech gehabt . Doch wie funktioniert nun der 3D-Audio Renderer? Wie in OpenAL oder DirectSound3D können Soundquellen in einem virtuellen Raum verteilt werden. Je nach Winkel zu dem Betrachter werden die verschiedenen Lautsprecherlautsärken berechnet (siehe: http://wiki.delphigl.com/index.php/3D_A ... berechnung): Um Phasenverschiebung/Dopplereffekt berücksichtigen zu können, wende ich den folgenden Trick an: Die Audiodaten werden nicht als reine Sampledaten im Speicher abgelegt, sondern eine passende (und sehr schnell zu berechnende) Spline-Funktion (siehe: http://audorra.sourceforge.net/index.ph ... erpolation). Nun kann nicht nur auf Sample-Basis sondern auf Zeitbasis auf die Audiodaten zugegriffen werden: Hierdurch wird "kostenlos" die Samplerate-Conversion durchgeführt, Pitch, Phasenverschiebund und Dopplereffekt berechnet. Und das alles quasi zum "Nulltarif". Die Spline-Daten werden zudem in einem 5-10sec großen Ringpuffer behalten, sodass jeweils in die "Zukunft" als auch die "Vergangenheit" der Audioquelle "gesehen" werden kann. Hierdurch können Effekte wie Echo recht einfach hinzugefügt werden. Noch nicht implementiert ist die Abschwächung der Soundquelle durch Wände. Ich möchte hier mit einem einfachen Raytracing arbeiten, wobei für die Wände jeweils Absorptionsfaktoren festgelegt werden. In einem weiteren Schritt möchte ich durch Hinzufügen von "Kindersoundquellen", welche automatisch von den Soundquellen ausgesandt werden, Echos hinzufügen. Jedoch soll letzeres erst in einer der nächsten Versionen erscheinen. Ersteinmal möchte ich die Hauptfeatures stabil bekommen. Andreas |
Autor: | igel457 [ So Nov 22, 2009 11:18 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Nach einigen Optimierungen konnte ich die Berechnungszeit meines 3D-Softwarerenderes von 250us auf durchschnittlich 185us pro 12,5ms Audiodaten (44100 Hz, 6 Kanäle) drücken: Ich hatte in meinem Ringpuffer unnötigerweise eine TCriticalSection und mehrere try-finally Konstrukte verwendet. Hinzu kommen jedoch noch einmal pauschal ca. 60us für die Konvertierung von Single zu SmallInt, wodurch wir bei insgesammt 235us wären. Unter anbetracht der Tatsache, dass mein einfacher Filtergraph (mit Lautstärkeregler und Kompressorfilter) schon (insgesammt) 130us für zwei Kanäle braucht, sind diese Werte nicht schlecht. |
Autor: | igel457 [ So Nov 22, 2009 23:05 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Mein Dopplereffekt/Phasenverschiebungscode funktioniert nun auch sehr gut. Wie oben beschrieben tritt hierdurch keine (nennenswerte) Verlangsamung des Berechnungsprozesses ein. Ich verfolge hierbei ein anderes, physikalisch korrekteres Modell als OpenAL: Dort wird zur Berechnung des Dopplereffekts für jede Soundquelle ein Geschwindigkeitsvektor benötigt. Die Phasenverschiebung, die aus dem Abstand von Tonquelle und Hörer sowie der Schallgeschwindigkeit entsteht, wird nicht berücksichtigt. Dabei ist genau diese der eigentliche Grund für den Dopplereffekt: Durch die Simulation der Phasenverschiebung entsteht zwangsläufig der Dopplereffekt (Proportional zur Ableitung der Phasenverschiebungsfunktion). Um eine "flüssige" Audioausgabe zu erreichen wird für jede Soundquelle vor jedem (großen) Berechnungsschritt ein Event ausgelöst, in welchem die Position der Audioquelle aktualisiert werden muss. Dies ist notwendig, da sich die Soundquellen kontinuierlich bewegen müssen um den Dopplereffekt korrekt erzeugen zu können (Ableitung der Phasenverschiebungsfunktion würde sonst kurzzeitig Null und somit auch der Dopplereffekt kurz stoppen, was sich nicht sehr gut anhört). |
Autor: | igel457 [ Mo Nov 23, 2009 20:15 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
So, ich habe das Ganze ein wenig Umstrukturiert ("Refactort" ) und die Soundinformationen und Emitter getrennt. Man kann sich das ungefähr folgendermaßen vorstellen: An einen Verstärker (Soundinformationen) können beliebig viele Lautsprecher (Emitter) angeschlossen werden. Diese können entsprechend im Raum verteilt werden. Mein erster Test hat mich mal wieder erstaunen lassen, wie glatt das Ganze läuft: Ich habe einen Raum mit 200m Größe erstellt und einen beweglichen Lautsprecher (an die Maus gekoppelt, ich habe nur eine Konsolenanwendung) und einen festen Lautsprecher bei (0|-100). Das Programm gestartet und sofort hatte ich ein realistisches Echo! Physikalisch (einigermaßen) korrekte Simulationen haben doch ihre Vorteile... Nun muss ich den Prozess nur noch wieder etwas zeitoptimieren... Andreas |
Autor: | igel457 [ Mi Nov 25, 2009 22:45 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
In den letzten Tagen habe ich noch die positionsabhängige Abschwächung des Audiosignals sowie "globale" Sounds eingebaut. Nun muss ich dort "nur" noch die Lautstärke pro Kanal regelbar machen, außerdem sind Bewegung und Orientierung des Listeners umzusetzen. Anschließend muss ich mir eine gute Kapselung für die 3D-Audioklassen überlegen - momentan sind diese nämlich weder Threadsicher (=> Performance) und sie besitzen noch keinerlei Anbindung an die eigentliche Bibliothek - es handelt sich ausschließlich um Klassen zur Berechnung von 3D-Audiodaten. In meiner Testanwendung streame ich die Daten "manuell" an den Ausgabetreiber. Ich plane den 3D-Renderer irgendwie in mein Filtergraphsystem zu integrieren - nur wie genau, darüber habe ich mir noch keine Gedanken gemacht - auch nicht darüber, wie ich meine Emitter- und Listener-Klassen am besten in ein Spiel einbauen würde. Dafür möchte ich eine entsprechende Demoapplikation schreiben. Wenn dann alles noch einmal "sauber" gemacht worden ist und enstprechend dokumentiert, wird es das erste "offizielle" Release geben. Andreas |
Autor: | igel457 [ So Dez 06, 2009 16:16 ] | ||
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek | ||
Hallo, ich habe heute mein Filtergraphsystem und meinen 3D-Audiorenderer "verschmolzen". Gelöst habe ich das Problem eine Klasse namens "TAu3DSoundAdapter": Diese Klasse kann in einen bestehenden Filtergraphen eingebunden werden und verbindet sich wiederrum mit dem 3D-Audiorenderer. Somit kann nun die ganz normale "TAuPlayer"-Klasse verwendet werden um die Audiodaten im 3D-Raum zu rendern: Code:
Um den Renderer mit dem Spiel zu synchronisieren werde ich eine Funktion "Lock/Unlock" in den Renderer einbauen, die Thread-Konflikte verhindern. Jedigliche verwendung des Renderers (also auch das einstellen von Parametern) muss folgendermaßen geschehen: Code:
Im Anhang ist ein Bildchen, das den neuen Weg des Filtergraphs zeigt (Blau sind Filtergraphelemente dargestellt)
|
Autor: | igel457 [ Fr Dez 11, 2009 18:30 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Hallo, mir war es heute möglich die Performance meines Systems um ca. 1/3 zu steigern. Dabei habe ich einige 80-Bit Fließkommazahlen durch 64-Bit Festkommawerte ersetzt. Zum Hintergrund: Wie ich bereits oben geschildert habe, ermöglicht mir meine Splineinterpolation zeitbasierten Zugriff auf die Audiodaten. Bisher habe ich hierbei in Sekunden gerechnet. Um trotzdem jedes Sample einzeln Ansteuern zu können und über die Zeit hinweg keine nennenswerten (!) Abweichungen zu bekommen habe ich mit 80-Bit Fließkommazahlen (Extended) gerechnet. Leider musste beim Lookup jedes Samplewertes ein Zeitstempel in eine Speicherstelle und einen t-Wert für die Splinefunktion umgerechnet werden. Genau diese Umrechnung benötigte jedoch jede Menge Zeit. Nun Rechne ich mit Int64 auf Samplebasis, wobei die letzten 16-Bit der Variable den Festkommateil darstellen. Dies geht nicht nur deutlich flotter, sondern ist auch noch nach den maximal Indexierbaren 2231 Jahren Audiowiedergabe (bei 96kHz, sollte glaube ich reichen) genauso genau wie nach dem ersten Sample. Zum Vergleich: Die Berechnung von 25ms eines Musikstückes bei 96kHz, 6 Kanäle, dauerte zuvor 900us, nun lediglich 600us. Andreas Update: Um Vergleichswerte zu haben: Anstatt der oben erwähnten 185us bei 12,5ms Audio und 44,1kHz benötige ich nun 150us. |
Autor: | igel457 [ Di Dez 22, 2009 14:19 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Ein bisschen WASAB(P)I schadet nie... Hallo, ich habe gestern Unterstützung für WASAPI (Windows Audio Session API) für Windows Vista und 7 eingebaut - WASAPI hat den Vorteil, dass es sich um die unterste Abstraktionsebene über dem Treiber handelt. Somit kann eine niedrige Latenzzeit erreicht werden - momentan bewege ich mich (mit meiner Implementierung, theoretisch ist garantiert mehr drin) bei 20ms (zum Vergleich: DirectSound funktionierte nur bei 100ms ohne Aussetzer). Auch Multichannel-Audio wird von dieser Schnittstelle unterstützt. Einzige Hürde hierbei: Bei DirectSound/WaveOut genügte es die "ChannelMask" einfach mit Einsen zu Füllen - WASAPI reagierte hierauf etwas allergisch. Der Nachteil des ganzen ist momentan, dass das Ganze nur im Exklusiven Modus richtig funktioniert - für Spiele sollte dies jedoch eher ein Vorteil sein. Da ich keine Lust hatte die Header für Pascal zu übersetzen habe ich mit Visual Studio eine einfache Wrapper-DLL für die WASAPI Schnittstelle geschrieben - entgegen allen Befürchtungen war das sehr einfach. Die DLL exportiert genau 6 Funktionen, was den Header sehr schlank macht: Code:
Die Bibliothek wird dynamisch geladen und ist (ohne Runtime) mit 8 KB sehr schlank - somit kann sie auch ohne Bedenken mit allen Programmen mitgeliefert werden - unter Windows XP/2000 kann das Plugin einfach nicht geladen werden und somit wird ein Fallback verwendet. Andreas |
Autor: | igel457 [ Mo Dez 28, 2009 18:05 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Hallo, ich habe endlich meinen 3D-Audio-Renderer ins SVN-Archiv geladen und ein vereinfachtes Interface gebaut. Übersicht: Au3DAudioRenderer.pas Beinhaltet den Kern des eigentlichen Softwarerenderes Au3DAudioFilters.pas Beinhaltet die Schnittstelle zwischen Filtergraph und Softwarerenderer Au3DRingBuffer.pas Beinhaltet den im Softwarerenderer verwendeten Ringpuffer Au3DAudio.pas Beinhaltet das "vereinfachte" Interface, welches einen High-Level Zugriff auf den Softwarerenderer und das Filtergraphsystem bietet. Verwendungsbeispiel: Code:
Ich bin auf eure Rückmeldungen gespannt, Andreas |
Autor: | igel457 [ Mi Dez 30, 2009 21:37 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Libao Ich habe heute und gestern Unterstützung für "libao" hinzugefügt - das Ganze läuft (abgesehen von WASAPI (20ms)) wie alle anderen Ausgabeschnittstellen mit 100ms Latenzzeit. Zudem habe ich begonnen Dokumentation und Tutorials für die Bibliothek zu schreiben. Wen es interessiert, hier ist der Link zum Pascal libao Header: http://audorra.svn.sourceforge.net/view ... iew=markup Zudem sollte ich nicht verschweigen, dass ich sehr angenehm überrascht von der neuen Lazarus-Version bin: Der Codeeditor sieht jetzt nicht nur aus wie Delphi, sondern fühlt sich fast so an. Nur hier und da funktioniert die Codevervollständigung nicht ganz so wie sie sollte - aber ich denke das wird noch. Den GUI-Editor habe ich nicht getestet, den brauche ich aber auch nicht . Also Appell an alle, die Lazarus ersteinmal zur Seite gelegt hatten: Ausprobieren! Guten Rutsch ins neue Jahr wünscht euch allen, Andreas PS: Das Wichtigste habe ich doch glatt vergessen: 1. libao läuft unter Linux! Deshalb habe ich jetzt nicht nur OpenAL für Cross-Platform Audioausgabe. Wurde auch mal Zeit. Habe ich schon erwähnt, dass ich kein großer Fan von OpenAL bin? 2. libao ist deshalb so praktisch, weil hierbei über eine gemeinsame Schnittstelle sehr viele verschiedene APIs angesprochen werden. Bei mir sind das momentan: - PulseAudio - ALSA - OSS - ESounD 3. libao ist übrigens von xiph.org, den "Machern" von Vorbis und Theora 4. libao ist auf den meisten Linuxsystemen bereits installiert. 5. Damit funktioniert nun auch Multichannel-Audioausgabe. Auch unter Linux. Perfekt für meinen 3D-Audio-Softarerenderer. OpenAL kann das (also Multichannel-Audioausgabe) übrigens nicht, außer mit irgendwelchen Extensions, die nur vom DirectSound-OpenAL-Softwarerenderer und irgendwelchen seltenen Soundkarten unterstützt werden. Habe ich übrigens schon erwähnt, dass ich OpenAL nicht mag? Leute, verwendet Audorra wenns' fertig ist |
Autor: | igel457 [ So Jan 03, 2010 16:20 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
Audio-CD und Soundeffekte Ich habe nun erfolgreich die Klassen "TAuStaticSound" und "TAuSoundList" in meinen 3D-Audiorenderer migriert. Die Klasse "TAuStaticSound" kümmert sich hierbei um das Laden und Speichern von Soundeffekten und stellt ein TAu3DSound Objekt bereit. Soll der Sound wiedergegeben werden, so muss einfach ein Emitter erstellt werden, der mit diesem Soundobjekt verknüpft ist. Der Emitter kann wie gewünscht im Raum verteilt werden. Hier ein kurzer Beispielcode: Code:
Zudem habe ich für Windows Unterstützung für Audio-CDs hinzugefügt. Diese werden über die Funktion DeviceIOControl ausgelesen. Der komplette Code für's CD-Auslesen findet sich hier: http://audorra.svn.sourceforge.net/viewvc/audorra/lib/win_cdrom.pas?revision=23&view=markup Um Audio-CDs in einer Applikation wiedergeben zu können, muss einfach die Unit "AuCDAudio.pas" eingebunden werden. CDs können nun durch öffnen der URL "cdda://F/12" (wobei "F" für das CD-Laufwerk steht und "12" für die Titelnummer) geöffnet werden. Zudem ist ein "Dekoder" für .cda Dateien vorhanden, der diese auf eben eine solche URL umleitet. Edit: Habe das URL Schema auf "cdda://F/?track=12" geändert, danke für den Hinweis an LordHorazont! |
Autor: | igel457 [ Sa Jan 09, 2010 23:14 ] | ||
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek | ||
Wir sind Einsatzbereit! Gute Neuigkeiten! Ich glaube Audorra nun in einem Stadium zu wissen, das ich guten Gewissens "Einsatztauglich" nennen kann - abgesehen von der Dokumentation. Aus diesem Grund - und auch nur aus diesem Grund - wird es vorerst auch kein offizielles Version 1.0 Beta Release geben - die aktuellste Version gibt es wie immer im SVN. Außerdem muss ich noch ein paar Tests unter Linux/Lazarus durchführen. Bevor ich die ganzen anderen Features einbaue möchte ich erst einmal die aktuelle Codebasis stabilisieren und die Dokumentation dazu schaffen. Es wäre sehr schön, wenn der eine oder andere hier die Bibliothek in seinem Projekt einsetzen könnte und mir Feedback über die Verwendbarkeit bzw. Vorschläge zur Verbesserung gibt. Ich habe zudem eine (noch sehr rudimentäre) Demo mit dem Namen "Soundscape" erstellt, mit der sich Sounds in den Speicher laden, in einem virtuellen Raum positionieren und schlussendlich wiedergeben lassen. Einen Screenshot der Anwendung habe ich angehängt, die Demo gibt's im SVN. Auch Support für die OGG Vorbis-Wiedergabe mithilfe der libvorbisfile ist nun vorhanden (AuVorbis.pas). Ich freue mich schon auf eure Rückmeldungen, Andreas
|
Autor: | igel457 [ So Feb 07, 2010 15:03 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
So, ich habe nun ein erstes, offizielles Release gebastelt: Version 0.5.0 BETA Die Dateien finden sich hier: https://sourceforge.net/projects/audorra/files/ Die noch rudimentäre (Wiki-)Dokumentation kann hier gefunden werden: https://sourceforge.net/apps/mediawiki/ ... =Main_Page |
Autor: | igel457 [ Fr Mär 12, 2010 17:24 ] |
Betreff des Beitrags: | Re: Audorra - Digitale 3D Audiobibliothek |
So, ich habe nun die (mittlerweile) zweite Bugfixversion hochgeladen, die einige Probleme mit dem 3D-Audiosystem behebt und Kompatibilität mit Delphiversionen kleiner Delphi 7 herstellt. Näheres kann im Meinungsthread zum Projekt nachgelesen werden. Version 0.5.2 BETA Die Dateien finden sich hier: https://sourceforge.net/projects/audorra/files/ Das Wiki baue ich momentan lokal bei mir um. Leider erweist sich das SF-Wiki als ziemlich lahm. Ich verwende nun Dokuwiki - dieses lässt sich (sammt Inhalten) sehr bequem und einfach auf einen neuen Server umziehen. |
Seite 1 von 2 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |