kcat / dsoal

A DirectSound DLL replacer that enables surround sound, HRTF, and EAX support via OpenAL Soft
GNU Lesser General Public License v2.1
392 stars 50 forks source link

Feature Request A3D Wrapping #50

Open Jenavieve-Rose opened 2 years ago

Jenavieve-Rose commented 2 years ago

Not sure if this is the place to make feature requests, but there are a few games that you cannot get any Spatial Audio out of without some sort of A3D wrapper. Now there are a handful of fairly not particularly great ones floating around out there using Inderectsound, but I was wondering if it was possible at all to get DSOAL to wrap it so that it works, and games think they have A3D support.

kcat commented 2 years ago

I'd need API references and programs to test with. I don't have anything that uses A3D, and I don't think there were too many apps/games that did, but having references and tests would be necessary to try to support it.

Jenavieve-Rose commented 2 years ago

Unfortunately I don't have API references, but as far as games I know Outlaws, Dark Forces II, and Star Trek Voyager Elite Force are all games that need A3D. What I've been doing is using a program called A3D Alchemy that's based on indirect sound and replacing then a3dand.dll with DSOAL dll. It works with several audio glitches.

mirh commented 2 years ago

Indirectsound just restores directsound3d. Any improvement will have to come from the wrappers that games may already be shipping. https://www.pcgamingwiki.com/wiki/Glossary:Sound_card#A3D

I'm not really sure what's the point of discussing it here, without even hardware to use as a reference. Maybe @ZanQuance is accepting donations, but idk.

Jenavieve-Rose commented 2 years ago

a3d alchemy.txt I mean this is basically what a3d alchemy does.

The main two drivers (a3d.dll and a3dapi.dll) were released in the early 2000s to allow people who didn't own Aureal-based sound cards (Aureal was the company behind A3D) to get basic surround sound and 3D effects in games that supported only A3D. Those drivers were actually wrappers that wrapped A3D calls to DirectSound3D calls, since nearly every sound card supported DirectSound3D. When Microsoft ditched DirectSound3D in Windows Vista, those wrappers stopped working unless the user downloaded and supplied something (like Creative ALchemy) which further wrapped those DirectSound3D calls to a newer API. Along with the two A3D drivers, A3D Alchemy includes IndirectSound's driver for that purpose, so that the user doesn't have to supply it.

So there are technically official wrappers and that is what this is based on, but it doesn't seem to work well tbh or better put accurately. SO I replace the inderect sound dll with the dsoal one and it works better but still not 100% accurately.

kcat commented 2 years ago

SO I replace the inderect sound dll with the dsoal one and it works better but still not 100% accurately.

It won't be 100% accurate to hardware, since OpenAL Soft uses its own algorithms for panning and effects. It should work better, since it supports full surround sound and HRTF mixing, and if the A3D wrappers utilize EAX for some effect emulation, they will have that available too. It just won't sound exactly like a real A3D card, or a real DS3D card that's using the A3D wrapper.

Audio glitches shouldn't happen, though, so if something sounds outright wrong with DSOAL while using the A3D wrapper, that probably means there's a bug in DSOAL. What issues are you hearing?

mirh commented 2 years ago

and it works better but still not 100% accurately.

Because all of those wrappers only address the "A2D" part? Ok A3D-live does, but it's just super incomplete. Having the in-game option light up is not having the entire thing.

You'll want the QSound dll for the best possible results today (which "a3d alchemy" may already be using.. god these names are awful), and that's as much as you can hope without some legit dev effort. Which isn't related to directsound (even though I believe a potential wrapper should target that for compatibility with XP and maybe even 98 too)

Jenavieve-Rose commented 2 years ago

It's mostly panning, some occlusion bugs, and a lot of weird reverb ones. Where reverb comes and goes randomly. And when it is present it is super heavy. I also switched to the Creative Alchemy wrapper too linked here https://www.pcgamingwiki.com/wiki/Glossary:Sound_card#A3D and like it has the same weird bugs, I am not familiar with QSound though and no idea what does or doesn't use it unfortunately lol. But I have tried all 3 methods I can find. the official Alchemy one the custom one made with indirect sound and A3D-Live.

ThreeDeeJay commented 2 years ago

@kcat Here's a list of games with A3D, as well as info and demos for comparison (might wanna filter by Playable/Untested): https://airtable.com/shrHh3k3Utc9T2NUz And I think they've been mentioned already but here's a list of wrappers, including A3D ones: https://airtable.com/shrNC8TQOVrknviGs @mirh Last I checked ZanQuance is taking an indefinite break (and even made all his videos private), so hopefully we can find someone who can help. And about that QSound DLL, any idea where it's available to download? I checked A3D-Alchemy and only see these files (a3dsnd.dll is IndirectSound) image

Jenavieve-Rose commented 2 years ago

I'd need API references and programs to test with. I don't have anything that uses A3D, and I don't think there were too many apps/games that did, but having references and tests would be necessary to try to support it.

So there is this reference guide on the A3D-Live webpage http://www.worknd.ru/a3d30ref.pdf I saw it in the above list of wrappers.

mirh commented 2 years ago

Everything I know (and possibly that there even is to know on the net AFAICT) is here. https://www.pcgamingwiki.com/wiki/Glossary:Sound_card#References https://www.vogons.org/viewtopic.php?f=62&t=41928 (why the videos are no more is also explained there)

If you want to start already playing with some code, you have the library by @worknd that I previously linked.

ThreeDeeJay commented 2 years ago

A3D Alchemy (based on QSound A3D Wrapper combined with IndirectSound)

Interesting, so those A3D Alchemy DLLs are indeed (based on?) the QSound wrapper. image image What confuses me is that, if A3D Alchemy is based on A3D-Live!, how come there's no mention of QSound/Q3D/QA3D in the A3D-Live! DLLs or source too? I'm just curious about the difference between the A3D-Live! and A3D Alchemy wrappers (excluding IndirectSound, of course)🤔

Jenavieve-Rose commented 2 years ago

Yeah, so far, the actual a3D-creative drivers are the most stable and I have the least amount of issues with, but the audio is borked tbh. DSOAL works fine as a wrapper for these it's just the audio is weird. Here is a log if you want to see DSOAL_LOG.zip

mirh commented 2 years ago

It's literally written on the PCGW page that the so-called a3d alchemy is just qsound plus indirectsound. It was made by this guy, on the more or less creative basis of my instructions here at the time. It's not so much that they used the specific A3D-Live! code, but they just credited them for stealing a3dapi.dll (itself just coming from the official a2ddrivers312 package) and the repurposed .inf file. A3D.dll has nothing to do with it (idk then why they decided to hex edit the thing)

You can read more about the QSound reasoning and evaluations here (even though I just now realize after 7 years that ZQ recanted some of that info, if you just check later revisions of the page.. idk if out of the usual perfectionism or because of figuring out that was actually bad)

Hiradur commented 2 years ago

Rayman 2 would be another game that would benefit from A3D wrapping. I think it doesn't have native DS3D support, but it's a bit confusing which audio APIs it supports.

mrpenguinb commented 2 years ago

I'd need API references and programs to test with. I don't have anything that uses A3D, and I don't think there were too many apps/games that did, but having references and tests would be necessary to try to support it.

So there is this reference guide on the A3D-Live webpage http://www.worknd.ru/a3d30ref.pdf I saw it in the above list of wrappers.

There are a few more documents on A3D-Live!'s site uploaded via the stuff.zip file (had to use 7-Zip to open the archive since Windows couldn't open it): http://www.worknd.ru/stuff.zip It contains the following:

ThreeDeeJay commented 3 months ago

TIL about this https://github.com/sigmaco/a3d-sdk It also includes A3D 1.2 and 2.0 SDKs which were used by a lot more games than A3D 3.0, so perhaps it contains useful stuff 👀

mrpenguinb commented 3 months ago

Sensaura have their S-3DPA wrapper handling Aureal's A3D in games that support it, so I looked into the motherboard AC 97' chipset that supports it. The SoundMAX drivers install a control panel and the drivers (duh), and 3D audio support for games like Deus Ex works on the Windows XP computers I have currently.

Looking at the SoundMAX AD1980 and comparing it against the AD1886A, the only hardware 3D acceleration either seem to provide is either none, or in the AD1886A's case, Phatâ„¢ Stereo 3D Stereo Enhancement.

With this in mind, the wrapping seems to be almost entirely soft-accelerated and done on the CPU. If the driver check for the SoundMAX panel is bypassed and the Sensaura .DLL's installed so that games can load them, then it might be possible to accelerate A3D on any Windows XP with onboard audio. Anyway, that's just a theory, if kcat could look into manipulating the DLLs to load and render audio, we could be onto something.