Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Hallo Andreas,
ich verfolge deine Audio-Lib schon länger und ich denke, dass ich bei Gael nicht auf fmod setzen werde sondern auf Audorra . Ich finde es wirklich Klasse, was du da für eine Bibliothek erstellt hat - wobei ich mir den Code oder die Demo noch nicht angeschaut habe - aber allein vom Lesen her denke ich, dass es sich für mich lohnt, auf Audorra zu setzen.
Ich weiß noch nicht, wann ich es schaffe bei mir die Sound-Engine zu integrieren. Sobald ich das jedoch angehe und mit der Library herumspielen werde, melde ich mich natürlich.
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
littleDave hat geschrieben:
ich verfolge deine Audio-Lib schon länger und ich denke, dass ich bei Gael nicht auf fmod setzen werde sondern auf Audorra .
Danke für das Lob, Audorra in Gael am Laufen zu "hören" fände ich natürlich Klasse, wenn du so weit bist, zögere nicht mir Fragen zu stellen oder Verbesserungsvorschläge zu geben.
Flash hat geschrieben:
Wenn dann Audorra soweit ist, dass du sagst "Es ist soweit fertig, dass andere es benutzen können", dann stell es doch auch in die DGL_Projekte-Ecke.
Done.
Edit: Es wäre auch schön, wenn jemand mit 5.1 Soundsystem die "Soundscape"-Demo mal testen könnte. Ich persönlich kann mich nämlich nur über trockene Zahlenwerte darauf verlassen, dass es funktionieren sollte, da ich über kein (aufeinander abgestimmtes) 5.1 Soundsystem verfüge.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich hab ein recht gutes und teures 5.1 Setup, dass ich mühevoll konfiguriert hab. Allerdings kann ich deine Soundscape Demo nicht testen. Nachdem ich recht umständlich die ganzen Files geladen hatte die man zum Kompilieren braucht (ne vorkompilierte Exe wäre toll), doppelt entpackt (tarball ist ja wohl *grml*) und dann kompiliert hab läuft die Exe nicht. Ich werde beim Start mit ner Zugriffsmeldung begrüsst, und wenn ich die Exe so starte dann bombardiert die mich permanent damit und muss über den Taskamanger abgeschossen werden. OS ist Vista64, Soundkarte ne Creative Labs X-Fi, kompiliert hab ichs mit Turbo Delphi.
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Danke fürs Testen - das es nicht funktioniert tut mir sehr Leid!
Ich habe allerdings schon eine Vermutung woran es liegt: Unter Windows Vista/7 [s]kann[/s] (halt: konnte! ich habe den Fehler gefunden!) ich mit DirectSound keinen Multichannel-Stream öffnen - und da du das WASAPI-Interface Modul nicht kompiliert hast, wurde dieses nicht geladen - und entsprechende Sicherungsmechanismen habe ich in der Demo noch nicht eingebaut.
So. Ich habe dir mal eine Binärversion (allerdings nur mit WAV-Support, alles andere passt nicht in den Anhang) angehängt, auch die WASAPI_Interface.dll ist dabei. Außerdem habe ich auch ein paar Fehlermeldungen in der Demo hinzugefügt.
In der Unit "AuDirectSound.pas" solltest du folgenden Code ersetzten (ich lade es ins SVN, sobald ich wieder mal XP gestartet habe):
Code:
function GetWaveFormatEx(AParameters: TAuAudioParametersEx): TWaveFormatExtensible;
var
i:integer;
begin
//Fill the result record with zeros
FillChar(result,SizeOf(result),#0);
with AParameters do
begin
//Copy wave format description into the wav_fmt buffer
//We only have two or one channels, so we're using the simple WaveFormatPCM
//format descriptor
result.Format.wFormatTag:= WAVE_FORMAT_PCM;
end;
end;
Die Fehlermeldungen habe ich folgendermaßen "reingehackt" - normalerweise sollte man in einem Setupdialog abfragen, welche Speakerkonfiguration verwendet werden soll:
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Aha, damit klappts wunderbar. Was mir allerdings direkt auffällt ist die Tatsache dass die WAVs extremst verzerrt bzw. übersteuert abgespielt werden und dementsprechend grausam klingen. Aber, und das ist ja wohl Ziel der Demo, die räumlich Positionierung funktioniert. Zumindest wenn man die Tonquelle verschiebt, den Höhrer zu verschieben bringt hier nichts (oder ist das gewollt). Der räumliche Effekt ist also definitiv da und direkt zu erkennen wenn man die Soundquelle um den Höhrer herum bewegt.
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Sascha Willems hat geschrieben:
Was mir allerdings direkt auffällt ist die Tatsache dass die WAVs extremst verzerrt bzw. übersteuert abgespielt werden und dementsprechend grausam klingen.
Hm, das sollte eigentlich nicht passieren, solange man nicht die Lautstärke Regler der Tonquellen/der Listener voll aufdreht - dann kann das eigentlich auch nicht passieren - schließlich werden die Soundinformationen ja komplett Softwareseitig berechnet - andere Ergebnisse als bei mir kann es eigentlich nicht geben. Vielleicht liegt es aber auch an den WAV-Dateien - ich habe hier ein paar, die anscheinend Fehler haben und deshalb um ein Byte geshifted ausgegeben werden (=> gräßlich).
Ich habe sicherheitshalber mal eine WAV-Datei angehängt. Probiere es mal damit.
Sascha Willems hat geschrieben:
den Höhrer zu verschieben bringt hier nichts (oder ist das gewollt).
Das ist (siehe oben) eigentlich auch nicht möglich - zumindest kann ich mir es nicht erklären. Bei der Verschiebung des Hörers wird lediglich die "Modelviewposition"-Matrix verändert - und wenn es mit der Positionierung der Tonquellen klappt müsste das auch mit dem Hörer funktionieren... Theoretisch zumindest
Ich hoffe, wir bekommen die Probleme irgendwie gelöst, Andreas
EDIT: Da fällt mir ein... Probiere wenn's geht mal folgendes aus: Suche in der Unit Au3DAudioRenderer.pas in der Methode "TAu3DChannelMapper.IntBuildMatrix" die folgende Zeile (ganz unten in der Prozedur):
Code:
//Setting this to one should be correct, as the sum of all channels is
Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Also ich hab das fertig kompilierte Demoprojekt bei mir (nur Stereo) ausprobiert und es hat fast alles funktioniert. Ich konnte entweder den Emitter oder den Listener verschieben und das gehörte stimmte mit dem gesehenen überein.
Jedoch habe ich wie Sascha auch das Problem mit dem Verzerren mancher wave-Dateien. Ich habe mal geschaut und folgendes festgestellt:
Die korrekt laufende Wave-Datei hat 16 bits pro Sample, während die verzerrte nur 8 bits pro Sample hatte (Quelle: VLC). Ich habe bei mir jetzt gerade keine wave-Datei mit 8 bits per Sample gefunden, die nicht verzerrt wurde. Vielleicht hilft das ja etwas, das Problem zu lösen.
Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Hallo Andreas
ich habe mir mal die aktuelle Version zusammen mit den Binaries heruntergeladen und habe dabei folgendes entdeckt:
Beim Starten der soundscape.exe oder der soundlist.exe unter Windows 7 wird VLC und AIMP (basiert auf bass.dll) komplett stumm. Wenn ich die Anwendung wieder beende, beruhigt sich VLC wieder und spielt wieder Musik ab. AIMP muss ich komplett neu starten, damit ich wieder was höre. Solange ich die Anwendung laufen habe, höre ich nichts mehr. Wahrscheinlich liegt das an der wasapi, genau weiß ich es aber nicht.
Das zweite Problem ist, wie beim letzten mal schon, die Wiedergabe von 8bit-Wave-Dateien. Diese sind wieder komplett übersteuert. Ich hab im Anhang mal eine Beispiel-Datei, mit der es bei mir nicht so wirklich klappt.
(PS: ich war gerade zu faul um die exe-Dateien selbst zu kompilieren)
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Das mit dem "Komplett-Stumm" kommt von der benutzung des exclusiven Modus der WASAPI. Lösche einfach die "wasapi_interface.dll", dann wird DirectSound verwendet.
Um die 8-Bit Wavedateien kümmere ich mich...
Edit: Es handelt sich bei den 8-Bit Wavedateien um ein Problem mit dem Acinerella/FFMpeg-Decoder. Wird stattdessen AuWAV verwendet, so gibt es kein Problem.
Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Hallo Andreas,
ich habe mich heute mal an Audorra gesetzt und geschaut, wie denn so alles läuft. Dabei habe ich gleich mehrere Bug-Reports für dich .
Ich benutze Delphi 7 - zwar nicht das neuste, aber es funktioniert bisher alles wunderbar. In D7 gibt es den Befehl "inline" noch nicht. Da du in deinen Defines ja das "inline" - Vorhandensein überprüfst, könntest du bei jedem Inline eine Compiler-Directive darum legen. Das spart einiges an löschen
Ab jetzt bezieht sich alles auf die soundscape - Demo
beim Beenden kommt es immer zu einer Exception (Bei Addresse 0x00000044 - lesen von Addresse 0x00000044). Anscheindend ist ein Pointer irgendwie zerschossen.
Hier mal der Call-Stack ( [UnitName] . [ClassName] . [MethodName] )
Manchmal werden Audio-Dateien werden nicht immer geöffnet. Ich hab mal geschaut, woran das liegt:
Ich habe in der SoundScape folgende Decoder in der uses-Liste (in dieser Reihenfolge): AuWAV, AuVorbis Acinerella habe ich NICHT eingebunden und ich habe auch die DLL sicherheitshalber umbenannt.
Jetzt habe ich das bisher so verstanden. Die einzelnen Decoder werden durch eine Art PlugIn-System in deiner Audio-Library hinzugefügt. Da die PlugIns aber nicht immer in der angegebenen Reihenfolge gelinkt werden, kann es schon mal vorkommen, dass sich AuVorbis vor AuWAV registriert. Das ist an sich nicht das Problem, jedoch hätte ich den Fehler ohne diesem Phänomen nicht gefunden .
Beim Laden einer Audio-Datei gehst du ja jeden Decoder durch und schaust, ob er die Datei laden kann. Jetzt ist es bei mir so: ich will eine .wav - Datei hinzufügen und bin mal durch alles durchgesteppt. Nun wurde zuerst der Vorbis-Decoder gefunden und somit wurde dieser zuerst ausprobiert. Der Decoder ließt ja dann aus Protocol.Stream die Daten. Nun merkt der Decoder, dass er keine .wav-Datei kann. Nun geht der DecoderProvider wieder weiter und findet den WAV-Decoder. Dieser sucht nun nach dem Wave-Header in Protocol.Stream. DAS GROßE PROBLEM DABEI IST, dass die Lese-Position vorher durch den Vorbis-Decoder verschoben wurde und somit nicht mehr stimmt. Man müsste vorher wieder ein Reset machen.
Da du ja auch "None-Seekable-Streams" wie z.B. ein HTTP-Stream unterstützt, wird das wahrscheinlich etwas mehr Aufwand . Zur Überprüfung meiner Theorie habe ich mal folgendes geändert und alles hat funktioniert ( [UnitName] . [ClassName] . [MethodName] ):
Ansonsten habe ich mir noch nicht viel angeschaut, aber bisher wirkt das ganze schon seeeehr gut. Ich hoffe ich konnte die Probleme detailiert genug beschreiben
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Hallo,
danke für deine ausführliche Antwort und Fehlerbeschreibung. Sobald ich Zeit habe werde ich die Probleme lösen.
littleDave hat geschrieben:
Ich benutze Delphi 7 - zwar nicht das neuste, aber es funktioniert bisher alles wunderbar. In D7 gibt es den Befehl "inline" noch nicht. Da du in deinen Defines ja das "inline" - Vorhandensein überprüfst, könntest du bei jedem Inline eine Compiler-Directive darum legen. Das spart einiges an löschen
Ja, das war geplant, habe ich vergessen. Dafür definiere ich extra "supports_inline".
littleDave hat geschrieben:
# beim Beenden kommt es immer zu einer Exception (Bei Addresse 0x00000044 - lesen von Addresse 0x00000044). Anscheindend ist ein Pointer irgendwie zerschossen.
Scheinbar wird FTarget freigegeben bevor AuFilterGraph.TAuTargetFilter.RemoveConnection aufgerufen wird. Das sieht nach einem Synchronisationsproblem zwischen den Threads aus.
littleDave hat geschrieben:
Da die PlugIns aber nicht immer in der angegebenen Reihenfolge gelinkt werden, kann es schon mal vorkommen, dass sich AuVorbis vor AuWAV registriert.
Hm... Sollte eigentlich nicht passieren Und ich könnte schwören, ich hätte das Seek-Back eingebaut *am kopf kratz*, naja, auf jeden Fall Danke für den Bericht! Ich baue es direkt um.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.