-
Notifications
You must be signed in to change notification settings - Fork 524
-
Notifications
You must be signed in to change notification settings - Fork 524
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bioshock EAX support #1001
Comments
Partially fixed by setting Bioshock.exe to Windows XP Service Pack 3 compatibility mode. Game now allows the EAX toggle and can be enabled. I don't have a Creative Soundblaster X-fi card and Windows XP to test the correct EAX sounds but there are definitely some effects added using EAX via OpenAL Soft. Further multiple errors in log: |
If the game uses OpenAL natively, I'm curious why it would need to be set to XP SP3 compatibility mode to enable EAX. It'd make sense for DSound, which removed hardware acceleration (and EAX as a consequence) with Vista and later, so there'd be no reason to try if on Vista or later. But with OpenAL, hardware acceleration was always and still is available with appropriate hardware/drivers. In any case, the It should be noted that OpenAL Soft doesn't actually handle the EAX5 flags. Something to do with upmixing, 3D elevation filters, and speaker levels. I can fix it for them to be recognized and not error, but they'll ultimately not do anything. |
Commit f21e916 should fix the flags out of range errors. |
I played BioShock months ago with an X-Fi Titanium HD which has OpenAL hardware support and I don't remember having to select Win XP compatibility. It's very strange, the game was released at the time of Windows Vista... Also I'm on Windows 11 (the card is theoretically not supported but still works). |
I can't explain why, but it definitely makes it work. There's a mention of it on PCGamingWiki stating that Windows 8 and above have an issue with sounds not playing that can be fixed with Windows XP SP3 compatibility mode. It references the Steam BioShock forums - although I couldn't find the post in question. |
I had stuttering audio issues after a few minutes of playing with a Sound Blaster Z card and its OpenAL software driver, no problems with X-Fi (except a BSOD), and I don't remember setting any compatibility modes. The part that tells you how to activate EAX doesn't make much sense... If you install OpenAL (by Creative), it installs Maybe there's something I don't understand? 😅 |
Does the game ship its own |
I don't see
The game has no problems detecting EAX on X-Fi cards. Also I just tested with OpenAL Soft 1.23.1 (log file alsoft_log.txt) |
I also had to use Windows XP compatibility last time I tested it, using 1.22.2 (demo). But even with EAX enabled, I wasn't able to get 3D audio, and I read that the game actually uses FMOD for audio mixing, not OpenAL or DirectSound, so if I understand correctly, it just applies EAX as a post-processing effect to the surround mix provided by FMOD, which might explain the unexpected behavior. I also tested it in Windows XP with an X-Fi sound card and still got the same result. Using wrap_oal.dll to convert OpenAL to DirectSound and then DSOAL would most likely have result, granted it doesn't break stuff to begin with.
I can confirm attempting to replace FMOD's sound system with OpenAL fails to play everything but the main menu BGM The remaster is even worse because apparently they broke EAX altogether (it's even missing from the audio options and the config setting doesn't work, even on XP) |
Wrap_oal is both "Generic Software" and "Generic Hardware".
So.. what? They still need an api to output the audio, and it's not like they could make their own EAX® with blackjack and hookers.
I mean, that sounds pretty normal tbh. It's the same in mass effect with ISACT, and in ME2 with wwise. |
I don't know what "Generic Hardware" does but I doubt any modern sound card would be recognized as such, no cards today have dedicated hardware voices, so wrap_oal probably just creates a "Generic Software" device with EAX 2.0 support and stereo output, ergo that guide on PCGamingWiki may be wrong (Does BioShock support EAX 2.0?). Download ALCapsViewer on a modern PC without Creative cards, install OpenAL (should install OpenAL32.dll and wrap_oal.dll), open ALCapsViewer and see what devices are listed (This might clarify everything). |
Of course there's no hardware directsound today, but that supposed fix is super old indeed.
It might be some fun to try to load the executable in ghidra.. But anyway, it appears the "creative eax audio" is actually a toggle for the entire openal subsystem? Patch 1.1 though probably blacklisted "generic software".
I know.. I did make the OpenAL tools package after all. |
https://web.archive.org/web/20080514015042/http://www.soundblaster.com/products/gaming/article.asp?articleID=71545&categoryID=13
How can this happen today? Forcing ALchemy to be used on non-Creative cards? For what purpose? I think it's better to use OpenAL Soft rather than ALchemy's EAX software emulation (it's pretty bad). Generic Software
This is what PCGamingWiki recommends but I think it's wrong. Putting wrap_oal.dll in the game directory and renaming it to openal32.dll what does it do? Do you have 3D audio without EAX? Because I don't think the game is backwards compatible with EAX 2.0 and as you said it seems like an antiquated solution.
So if you have a Creative card (with OpenAL hardware support, Host OpenAL works badly), you can enable
|
I didn't say that (even though it's certainly possible and documented). I meant that some smartasses, rather than actually fixing openal in certain games, went the roundabout way through alchemy restoring the "generic hardware" renderer.
Last time I checked it wasn't that bad (at least if you managed to hit "Using Native OpenAL Renderer" instead of "Using Creative Software 3D Library"). But sure, no doubt that openal soft is the only thing worth using in 2024.
It does what it does in every single other game ever? Like, seriously?
As linked, the game likely blacklisted generic software in patch 1.1 (it would be nice to check the demo perhaps?). |
Trust me, ALchemy's EAX software emulation is terrible, so much reverb (I owned a Sound Blaster Z). Then as already mentioned, ALchemy's EAX software emulation is terrible while Host OpenAL has always given me problems such as popping or stuttering audio in BioShock or Prey (after a few minutes of play) as well as having the same exaggerated reverb problems as ALchemy. Everything I wrote I tested personally.
I know what it does, but how does the game behave?
Forget this. |
To be fair, given wrap_oal.dll wraps OpenAL to DirectSound3D, renaming it to OpenAL32.dll would force open the door to DSOAL, which does provide some tangible benefits in some cases. e.g. Just Cause comes with a rare but subpar GameCODA/Sensaura(?)-based built-in HRTF, and neither DSOAL nor OpenAL Soft alone can disable that filter on their own, so enabling OpenAL Soft's HRTF would make positioning even more diffuse from the double HRTF processing. Only by adding wrap_oal.dll alongside DSOAL are we able to get proper 3D audio, in addition to setting According to this, wrap_oal allows to "restore EAX effects in native OpenAL games" but I'm also not sure why translating OpenAL calls to DS3D for EAX would work better than using OpenAL's EFX or even EAX directly. Were there sound cards that lacked ct_oal.dll and needed this wrapper to support hardware mixing in OpenAL games? 🤔
I really doubt so, unless earlier builds did work differently, since like I mentioned before, actually changing the audio system to OpenAL results in no audio since OpenAL/Soft doesn't seem to be capable of decoding FMOD soundbanks. I've only seen that switch work in games where the default audio subsystem (like Galaxy) uses more generic sound file formats. And to think there was a time when FMOD supported hardware EAX/HRTF directly.
Yeah, without proper hardware like the X-Fi series, ct_oal.dll, ALchemy won't yield good results, especially with the Creative Software 3D Library, but IMO sens_oal/Host OpenAL does sound better and more accurate to hardware sound. Maybe adjusting buffer settings would fix popping? Either way, I'd still go with DSOAL mainly because of custom HRTF but also at least I can adjust the reverb volume, flip axes, etc. |
Which isn't what I said unless you tinker with it.
I didn't recommend anything at all, and this has nothing to do with bioshock. I said that many clueless people are so used to just applying alchemy to old games, that they just use it indiscriminately even when openal is involved.
I actually just checked both the demo and the game on steam.. And indeed it even looks like they let you enable everything with "generic software" too? (I couldn't legitimately confirm that was the renderer being used because unlike other games they don't seem to have a console or a log to tell you, but EnumerateWin32 reported that was the default) Even though from decompiling the executable I could tell they are still doing something with the name of that string, in the same bitmask that also stores the EAX version. FWIW they are properly checking each of them from 5 to 2. p.s. seemingly even some world of warcraft build uses/used to have this particular FMOD configuration where it could selectively use its own mixer or openal
So what then? It's stupid. If really you cannot get the game to pickup the device you want, you should just rename soft_oal to it if any.
And that used openal?
In 2018 dsoal's eax and oal-soft's eax were separate (in fact as we know dsoal was very much the potpourri of regressions and fixes in those days)
I never understood the point of
That's still all within FMODAudio.FMODAudioSubsystem, it doesn't have to use the ALAudio.ALAudioSubsystem that you are thinking
Literally this |
There were probably sound cards that supported DirectSound3D but not OpenAL.
With wrap_oal + ALchemy or DSOAL, I could speculate that the game could run in some sort of EAX 4.0 compatibility mode, detecting the "Generic Hardware" device.
Host OpenAL is as bad as ALchemy (reverb, reverb and more reverb 😅) and also, as already written, it has some problems that I haven't found solutions to. In Host OpenAL you can't adjust any buffer settings. I have an X-Fi on a modern PC and it works fine in these games (well in Bioshock I had a BSOD but only once in the entire campaign). |
None, because the moment openal became its own standalone api wrap_oal already existed. Uh, would you guess. I just realized that HOAL was actually born for licensing to motherboard vendors, and it does seem like some soundmax drivers did include it. So go figure the absolute state of software in ~2008.
It's not a "compatibility mode", it's the whole thing as it should.
The issue there isn't even "I have no multichannel audio" or "positioning sucks", it's literally "I have stuttering". ... interestingly enough a guy reported just copying the vanilla openal32 into the game folder would be enough to call it a day.
Considering all the atrocious discussions we had on it.. It doesn't seem so simple really (btw there's a guy claiming the fix that was committed last year should be reverted if you still have this pet peeve) |
Yes the issue with Doom 3 was much more complex but I was just referring to the way you can hear audio clipping with the default game audio settings and EAX enabled on X-Fi. |
@mirh The point in my example isn't just about forcing the OpenAL Soft library/device, but more importantly, bypass the built-in HRTF and spatialize objects instead of channels, which is what happens when just renaming soft_oal to OpenAL32.dll
Apparently yeah, at least as a fallback
JC still needs the OAL-DS3D wrapper even in the latest builds so either it hasn't been fixed or that was never the issue.
My FMOD video used DirectSound3D, not OpenAL, so I don't really think it's the same, unless FMODAudioSubsystem in Bioshock can still be forced to use DS3D natively for audio mixing, as opposed to e.g. Source engine, which can use DirectSound3D but only to use objects as virtual speakers to virtualize the surround mix.
@Kappa971 When the game doesn't find any OpenAL libraries (which seems common since apparently it doesn't ship OpenAL redist even on Steam), sounds will be missing (besides menu BGM which always uses DirectSound) [ShockGame.ShockUserSettings]
bEAXEnabled=True With a wrapper like DSOAL, there will also be an emulated "Generic Hardware" which supports up to EAX 4.0, so I wonder if there'd be any benefits if DSOAL supported EAX 5.0 from OpenAL Soft. 🤔 Anyhow, the EAX option (which tbf is "audio" not "reverb") doesn't seem to be reverb-related but instead it just seems to force DirectSound (when set to OFF, which explains why HRTF isn't applied despite being explicitly enabled in alsoft.ini) or OpenAL (ON) for output (not mixing, which is handled by FMOD), while the Reverb option is what actually toggles reverb (noticeable when pausing right after loud sounds in certain areas) even when there are no oal libraries found or setting reverb So I wonder if the EAX option was just a half-assed afterthought, added just for the marketing buzzword, which would explain why they did away with it in the remaster. Or were there actual, proven benefits from this particular EAX implementation back then or even now? Either way, I still think the best method is still just adding soft_oal.dll as OpenAL32.dll to virtualize the 7.1 mode and running as WinXP compat for EAX (or forcing it via config, or oddly enough, enabling at least one Recording device) in case that's even useful. |
It would seem strange for openal-soft to be bugged? Or now that I think to it.. I'm not sure why you are surprised of the usual progression of first checking the local folder for dlls to load, before the system ones.
You mean with openal? That really seems like the api would be a second class citizen. Maybe with just cause's development having started in 2003, gamecoda wasn't really up to par with it (assuming sensaura ever actually got to update it). Or maybe there's some fancy pants "smart selection" logic that breaks completely apart for some ungodly reason (I'll once again remind everyone that before 2005-2006 ct_oal didn't exist, and openal just opened
I'm talking about bioshock. What else did you mean with changing the audio system, if not trying to tinkering with the
Oh, that's what you meant. I don't really know if FMOD couldn't have some hackable way to toggle it (it doesn't seem that impossible, considering everything and the kitchen sink seems compiled in as I said above) but it would seem pretty strange if they specifically added this output with creative's blessing and naming.. only to cut them out?
While admittedly I still haven't figured this out, I'm pretty skeptical that would be the case. FMOD in particular certainly couldn't have been so dumb.
Putting aside that as I said, many games have logic to specifically single out "generic" renderers (including this one, even though I couldn't understand what they do with it)
It's doubtful if directsound ever had EAX5, and at least the directsound code that I have seen in the game didn't have such calls.
Literally what they said in the interview. Too bad I couldn't get a hold of the old 4.0x documentation (especially considering it seems like that between versions 4.04 and 4.07 they went through two different openal codebases)
Everything from creative was a marketing buzzword, so.. yeah? But really you shouldn't read too much into tea leaves.
Uhm.. Now that I check, FMOD 4.07.21 (released on 20/08/07) "fixed a problem with Vista WASAPI output mode" that reported "an error when no default input device is detected". |
@mirh I don't recall reading about the game supporting OpenAL/EAX but I think we were just discussing about gameCODA's theoretical OpenAL support and after seeing mentions in the DRM-free executable, I decided to give it a shot and to my surprise, even EAX seemed to work.
Ah, so I guess you meant
But then again, they did cut out EAX in the remaster, which annoyed some people.
I mean...
Perhaps that's really what fixed Just Cause?
Yeah I'm not aware of any native DS3D game with EAX 5.0 either, but I do know of a handful of OpenAL games with EAX 5.0 that use wrap_oal.dll so I wonder if there's any feature loss during API call translation to DS3D and if there's any way to test. |
So... Has anyone here tested BioShock with OpenAL Soft? Are there any bugs or issues besides having to run the game "as administrator"? |
@Kappa971 I think this is our best option for Bioshock atm, but I only tested the first level. Someone would need to play through the full game to see if there are issues or a better method. In my playthrough over a decade ago, I just used an X-Fi with CMSS-3D add IIRC everything seemed to work fine but tbh I was playing more attention to the HRTF than the reverb. |
I played BioShock a year ago with an X-Fi Titanium HD (and CMSS-3D but on stereo speakers, it still does something), Windows 11 and official drivers and I had no major issues (one BSOD, but I wouldn't be surprised if that happened in 2007 too). |
Sigh.. This sent me on a rabbit hold and I just figured half of what hypothesized the old openal 1.0 times to be kinda wrong. Once upon a time, there only existed OpenAL32.dll (which everybody on the system just replaced with whatever single one they wanted). Then the router was created in late 2003. At the same time (or at least, until that time and then some)
Look, I'll make this quick with what I just found in ghidra (also thanks to ReLOADeD for the exe unpacking work):
I could also find specific checks about the OpenAL32 and wrap_oal dlls, but the "audio load" function is far more complex to "decode" than just the one specific to check for EAX3 (so I'll just recommend you to experiment with dlls locations if the first try isn't enough)
Okay, I'm pretty fucking depressed and tired by now.. have a nice day (I'd be curious to know how other games behave though)
As I already said, it's called
I mean, of course if it was compiled against library version X, a way older version would miss a lot of the symbols it expects.
Again what? The remaster was released in 2016.
No? Like, I'll grant I know nothing about Gothic but that's obviously just toggling the output inside of FMOD.
Of course? What else could they have used in 2005 to get the best audio (or well, even surround at all) in windows?
You can already tell from the thumbnails that's all "modern" problems.
Remind me again how people can not have at least a single input device? Or is the actual requirement that it must be currently connected?
When it stopped to rely on specific hardware (and hence driver) behaviour 🐵
Ehrm.. When I said "single out" what I meant was blacklists primarily. It's intriguing to note that while oal-soft does custom matching for "DirectSound3D" as I said above, it cares absolutely nothing about the Generics instead.
Only "Generic Software" exists once in the executable.. so to be sure whatever they do with I don't expect it to be anything "high-end".
Uhm.. Like every single one of them, duh? How else could they have even supported audio on a normal pc?
I'm pretty sure we just pinned down the audio problem to having (some degree of) at least one enabled recording device if reporting Vista+. Do you have different evidence? |
@Kappa971 Yeah, I think it uses crosstalk cancellation for HRTF when set to Speaker (as opposed to headphones) which is was surprisingly decent last I checked
But the real question is: what exactly is applying reverb? And if reverb was applied by FMOD, how come it was removed in the Remaster after upgrading to FMODEx? Hell, I couldn't even use DSOAL/OpenAL Soft to force a permanent reverb preset because apparently it's using WASAPI or something. I guess an alternative would be a system-wide effect like the EAX Reverb VST in EqualizerAPO. That wouldn't be that much different from the original audio, especially if they were lazy enough to use a single reverb preset everywhere (tho tbf at least it was turned off/attenuated in some areas).
@mirh So it only enables EAX 3.0 when it finds a device containing the string "Creative"? also I don't know what you mean by experimenting with dlls locations
Apparently there's also Men of Valor, Duke Nukem Forever and "Team Fortress 2 with dsp_facingaway", but I'm yet to test/confirm them.
The amount of OpenAL games has only increased since 2016, so it's not like we're talking about DirectSound3D with premium sound cards. I doubt they wanted to drop "EAX"/OpenAL, but I don't think they had a choice since the move to FMODEx meant no more OpenAL.
Yeah, you're right
The point was that games that used old FMOD (pre-Ex) maybe could be hacked to force native DS3D/OpenAL
I've found a bunch of reports like these of missing audio even on Vista (which had been out for about half a year by the time the game released) but tbf most people were still on XP where missing audio might not has been as common because even back then they recommended running with XP compat and enabling a recording device.
IME I just disable them so they're not mixed into gameplay recordings, which ShadowPlay likes to do by default. idk about others
Then it's gotta be something else because obviously Just Cause only sees the 2 Generic devices and it still works.
Even more reason to find out whether EAX 5.0 features could be salvaged from wrap_oal or if they were just discarded, in case other games also have better results via wrap_oal+DSOAL as opposed to using soft_oal directly 🤔 |
It wouldn't be the first time software reverb (perhaps based on I3DL2) tries to straight up replicate EAX.
Of course it does, no sense in using anything else.
My timid understanding is actually that
The game folder and system folder (both with the normal router, and with direct openal-soft forcing)
?? I meant other gamecoda games..
OpenAL on (I really couldn't have expected any OAL surge then, but I'm skeptical more than a handful of them did actually dirtied their hands with the api as opposed to just going along with whatever their simple game engine used out of the box).
No they couldn't (and I'm not sure what an .ini with probably the default UE2 settings could say)
And I'm saying that in 2005 you don't have no need of hacks, because clearly that was the only api available.
I see then - so that really cracks the mystery, isn't it?
?? No, I'm saying: every single one of the EAX 5 games of course had to came with wrap_oal (or at least something equivalent, BF2 development predated openal 1.1 but they still have two dlls). Otherwise they couldn't have had audio.
Yes of course? It has eax5 support.
|
@mirh That's a no-go
mrpenguinb told me about these games, which contain all of these strings in the exe like JC:
There's also a couple ones mentioned in the DS3D games list
Also, I just found the SDK and this:
By fixing ALAudio, I meant actually porting soundbanks to generic WAVs or whatever OpenAL is compatible with, and I guess also porting reverb zones to EAX/EFX.
I was asking about the presence of those EAX 5.0 features specifically when using wrap_oal.dll and DSOAL, not OpenAL Soft directly, in case we do happen to get better results with the former like the examples above or other games that perhaps rely on/are fooled by Creative's wrapper to expose certain features. On a similar note, I wonder why many games (even native DS3D) query for high EAX versions like EAX 3/4, but fallback to EAX 2. I might have to gather more details and instances where it happens and submit a new issue 🤔 |
OpenAL isn't "compatible" with WAVs or any other file format. The file is loaded by the app, using whatever audio loading library or routines it has, and passes the samples to OpenAL. Similar for files defining reverb zones, it's up to the app to load them and supply the appropriate data to OpenAL from them. OpenAL is just as compatible with FMOD soundbanks and the like, in the end it's all up to the app to load the files and give OpenAL the data it needs from them (you're just more likely to find libraries or existing code to load and decode wav, ogg, mp3, flac, etc, than an FMOD soundbank loader (that isn't FMOD itself)). I'm also not sure converting FMOD soundbanks would be that easy. As the name suggests, soundbanks contain a bank of sounds -- multiple sounds relevant to the object or scene it's associated with, possibly with metadata about how the sounds relate to each other -- not something that could be conveyed by standard wav, ogg, etc, files (at least not without special fields that a converter could put relevant information in, that the loader would read and handle as appropriate). |
@kcat I see, so IIUC this is ALAudio's limitation, not necessarily OpenAL's. So to recap, and anyone feel free to correct me if I'm wrong, the problem is that even though Bioshock's FMOD Unreal Engine subsystem already can use OpenAL, it's only used for output (channel-based, not object-based) and I don't know how/if there's a way to force OAL (or DS3D, maybe on XP?) for mixing, especially without losing soundbank support. So the only alternative I can think of is switching to ALAudio UE subsystem which does use OpenAL for mixing (object-based) but since that doesn't use FMOD or support its soundbanks, those would need to be converted to something else that ALAudio can read —fsbext can extract Bioshock soundbanks (FSB3 (ADPCM))— along with linked metadata, if any. Unless... EAX reverb is on a similar boat since apparently (at least in Bioshock) it's done entirely in FMOD, not OpenAL as we previously thought, so reverb parameters would need to be ported/translated in ALAudio to something OpenAL can interpret. But yeah, I'm not saying any of this would be easy. Just weighing theoretical routes the original devs (or competent programmers AKA not me lol) could take. I'm more than happy to test stuff tho 👀👌 |
This doesn't make sense (or I'm confused): if FMOD takes care of everything (including reverb), what does the "Use Creative EAX" option do?
An advice would be to play the game and have fun without worrying too much at this point 😅 |
Uhm.. we are talking about the original bioshock, yes? It makes zero sense that could not run on XP.
I.e. they have the blacklist that you can totally try to work around.
For the absolute love of me I couldn't find My 2c would be that whatever the problem of openal-soft not engaging, is either the normal blacklist issue, or that it may expect whatever early openal 1.0 quirk (it's older than the first svn revision, even though SensAudio.dll does support ALC_ENUMERATION_EXT). But I might be wrong. That's what I had linked before realizing the hidden "Creative" check they implemented flips the bird to any documentation or theory.
That sounds like a lot of work for nothing. I don't have ever developed a game, but I'm pretty sure every pro studio uses wwise or fmod or something along that because they have pretty nice dev environments/editors.
There is not much you can do with them if wrap_oal doesn't have such code to begin with, do you?
Normally I'm of the school "we do what we do because we can", but I really don't want to partake in this sick game that could encourage people to do the stupid thing in other games too
🙄🙄 you really seem to have some kinda of amnesia in this thread..
FMOD should be slightly easier but still, for wwise I know it's almost rocket science.
He's dreaming of some 300IQ hack for the game where you rewrite or reroute its audio engine. |
That's literally just about it. OAL/DS3D for output (not mixing) so it just allows virtualizing surround but no actual EAX/3D audio IME. I'm yet to see evidence of that EAX setting actually having anything to do with audible reverb, despite boost and seeing EAX calls in the log. Same results with OpenAL Soft directly and even ALchemy. DS3D mode (XP compat without OpenAL installed) is even worse: only virtualized stereo (even when set to 7.1) and still no audible EAX reverb so it's better to just use OpenAL Soft directly. I'm this 🤏 close to calling the whole EAX 5.0 "support" just another Creative/2K marketing scam but I don't wanna jump the gun just yet. I'll give them the benefit of the doubt at least until I test whether it works as it pretends to, in XP with an X-Fi.
I still stand by this:
When in doubt, you can just search and check out the top |
So, well, yeah.. we don't really have any game where ds3d is better than openal.
The X-Fi on Vista+ should be also fine with oal (though yeah, I wouldn't risk it). |
I'm the first to think that Creative isn't a very fair company towards its users, but I'm pretty skeptical about this BioShock thing. |
@mirh Nope, I was still talking about the remaster. We already know the original works (and may even need) XP compat, but I just wanted to check if the remaster could get VSS via DLL drop-in instead of having to set up something like HeSuVi.
Wait, it actually works!! ThreeDeeJay@dc150c8
Yeah, sadly the trend is switching from DS3D/OAL to FMOD like RBR RSF, Truck sims, BeamNG, etc., but the point would have been actually delivering the advertised EAX 5.0 and 3D audio. Obviously I don't expect that now, but we never know, the HLA mod (VR and Steam Audio 3D HRTF) would seem a lot more far-fetched on paper but it is a thing so it might just be a matter of skill and will.
I wouldn't expect people to start throwing science at the wall to see what sticks either, unless there is a good reason for it. Cuz wouldn't you know it? We really did get results after such a long conversation (even if it was way off-topic lmao)
tbf it's hard to keep track with so many simultaneous convos (See: my first reply), but a quick search took me to
I mean, Smirftsch's ALAudio literally replaces Galaxy soundsystem to use native OpenAL (Soft) EAX and 3D audio in a handful of UE games, so this isn't really a new concept, especially when those games might not even have a partial built-in ALAudio implementation like BS and other FMOD games.
@Kappa971 I guess with ct_oal.dll there's always risk of BSOD since it's hardware but then again, I'm yet to see evidence of hardware mixing/rendering (with 3D HRTF and EAX reverb) like in proper DS3D/OAL games. The closest I've found were X-Fi CA20K (no 3D HRTF, just virtualized stereo 🤢) and X-Fi Fatal1ty on XP (no HRTF at all, maybe because they used Stereo mode) so you can see why I take marketing (especially Creative's) with a grain of salt. Meanwhile, there's tons of footage of games with a proper/-ish OpenAL/EAX 5.0 implementation: Mass Effect/LE, Battlefield 2/Project Reality, UT 2004, UT3, Quake 4. |
Theoretically that should be new enough that it should be able to enumerate your dll, if you spoof your device and openal names to something containing the word "Audigy".
That's super cursed (readme even mentions Audigys are broken, even though patch 1.2 mentioned that should be good again). I wonder if re-building the vanilla openal32 0.9.7.0 wrapper would have it working (i.e. then it's just some early beta openal 1.0 quirk that has been lost today) or if instead the Mark Zlamal's modifications aren't expecting something precise from the creative-tweaked dll.
Yes, but we got here exactly because I knew it couldn't be that way.
The gamecoda thing? Because gamecoda evidently is openal native, so it loads the wrapper as its pseudo-driver.
Fair-ish enough, but it's one thing to replace a sort of plugin that has specifically been compartmentalized in the game with just a few interfaces and whatnot.. And then there's ripping out not just the audio 3D processing but even just the logic that probably was used to load sounds and whatever else. Like.. Isn't fmodex like 10 times as big as alaudio? |
@mirh Like this? ThreeDeeJay@3e9217f (ignore the extra quotes). I thought setting the vendor to Creative was enough, though I don't know how to check if the game's actually making EAX (3.0) calls like when using the wrap_oal+DSOAL. I didn't notice any difference even with
No luck with 0.x/1.x DLLs I found online. Only when switching SenAudio to ALAudio does it load OpenAL32.dll (but just like Bioshock, everything besides DirectSound stuff like some BGM/FMV is silent)
I mean, IME both methods seem audibly indistinguishable and only with the "stupid" method do we know there's some EAX 3 activity (or at least attempt) going on, though maybe it's just some seemingly empty calls like in Bioshock. And yeah, DSOAL with EAX5 doesn't make sense atm, though I wonder if OpenAL EAX 5.0>wrap_oal>DS3D>ALchemy>Native renderer>log could provide some clues of what it's doing with EAX5 calls 🤔
Again, that still doesn't explain why it happens in some native DirectSound3D games. |
Yes, the last thing is enough to have the game accept openal-soft when you force it by replacing the dll.
Oooh, lmao? Well, yeah. If it doesn't even attempt to load the default one (check in procmon) then I guess that was a red herring. Maybe it was just a file included with whatever UE2 build they used (and that could also explain why it's so awfully old).
Of course when the soundbanks are all specific to coda.
It should not explain that? As you said, they are directsound games. Completely different set of rules. Btw hope you are using the full ass installer for eax unified because otherwise you aren't getting its CLSID installed. |
But it's already accepting OpenAL Soft (with just Creative vendor) when I replace OpenAL32.dll
Yeah, I doubt MOV's built-in OpenAL32.dll is anything more than a leftover from the unused ALAudio device Also no mentions of
Hence the question.
Yeah, tho I often also update its eax.dll from the installer's 4.0.0.1 to 4.0.1.0 included in some games because why not. |
I know, I was just telling you how not even to need to replace it.
You meant that it keeps falling back to the default rendering situation, rather than using openal soft at all?
If you have wrap_oal in the system folder it seems remotely expectable.
I'm afraid it might potentially be more fucked up than that.. DVar2 = GetCurrentDirectoryA(0x105,aCStack_34c);
if (DVar2 != 0) {
iVar6 = 0x104;
pcVar3 = aCStack_34c;
do {
if (*pcVar3 == '\0') {
if (iVar6 != 0) {
FUN_0094e220(auStack_248 + -iVar6,0x104 - (-iVar6 + 0x104),"/OpenAL32.dll");
}
break;
}
pcVar3 = pcVar3 + 1;
iVar6 = iVar6 + -1;
} while (iVar6 != 0);
pHVar4 = LoadLibraryA(aCStack_34c);
*(HMODULE *)(param_1 + 4) = pHVar4;
if ((pHVar4 == (HMODULE)0x0) && (DVar2 = GetCurrentDirectoryA(0x105,aCStack_34c), DVar2 != 0)) {
iVar6 = 0x104;
pcVar3 = aCStack_34c;
do {
if (*pcVar3 == '\0') {
if (iVar6 != 0) {
FUN_0094e220(auStack_248 + -iVar6,0x104 - (-iVar6 + 0x104),"/wrap_oal.dll");
}
break;
}
pcVar3 = pcVar3 + 1;
iVar6 = iVar6 + -1;
} while (iVar6 != 0);
pHVar4 = LoadLibraryA(aCStack_34c);
*(HMODULE *)(param_1 + 4) = pHVar4;
}
if (*(int *)(param_1 + 4) != 0) {
cVar1 = FUN_0094e270(); // alcOpenDevice + alGenSources something
if ((cVar1 != '\0') && (cVar1 = FUN_0094e300("DirectSound3D"), cVar1 != '\0')) {
cVar1 = FUN_0094e360(); // alcCreateContext + alcMakeContextCurrent
if (cVar1 != '\0') {
cVar1 = FUN_0094e950(); // that EAX3.0 & "Creative" check
if (cVar1 != '\0') {
return 1;
}
FUN_0094e2b0(); // alcDestroyContext something
}
FUN_0094e8f0(); // alcCloseDevice
}
FreeLibrary(*(HMODULE *)(param_1 + 4));
*(undefined4 *)(param_1 + 4) = 0;
}
FUN_0094e4e0();
}
UVar5 = GetSystemDirectoryA(aCStack_34c,0x105);
if (UVar5 != 0) {
iVar6 = 0x104;
pcVar3 = aCStack_34c;
do {
if (*pcVar3 == '\0') {
if (iVar6 != 0) {
FUN_0094e220(auStack_248 + -iVar6,0x104 - (-iVar6 + 0x104),"/OpenAL32.dll");
}
break;
}
pcVar3 = pcVar3 + 1;
iVar6 = iVar6 + -1;
} while (iVar6 != 0);
hFindFile = FindFirstFileA(aCStack_34c,&_Stack_140);
if (hFindFile != (HANDLE)0xffffffff) {
FindClose(hFindFile);
pHVar4 = LoadLibraryA(aCStack_34c);
*(HMODULE *)(param_1 + 4) = pHVar4;
if (pHVar4 != (HMODULE)0x0) {
cVar1 = FUN_0094e270(); // alcOpenDevice + alGenSources something (ditto)
if ((cVar1 != '\0') && (cVar1 = FUN_0094e300(0), cVar1 != '\0')) { // alcOpenDevice (ditto)
cVar1 = FUN_0094e600(auStack_244); // god kill me
FUN_0094e8f0(); // alcCloseDevice (ditto)
if ((cVar1 != '\0') && (cVar1 = FUN_0094e300(auStack_244), cVar1 != '\0')) {
cVar1 = FUN_0094e360(); // alcCreateContext + alcMakeContextCurrent (ditto)
if (cVar1 != '\0') {
cVar1 = FUN_0094e950(); // that EAX3.0 & "Creative" check (ditto)
if (cVar1 != '\0') {
return 1;
}
FUN_0094e2b0(); // alcDestroyContext something
}
FUN_0094e8f0(); // alcCloseDevice (ditto)
}
}
FreeLibrary(*(HMODULE *)(param_1 + 4));
*(undefined4 *)(param_1 + 4) = 0;
}
}
}
return 0; This seems to be them poking the dlls they can find, to see what's best to load.
Ok, then it was really the wrong path to focus on (even though I eventually realized the other thing by looking at the old sources). YET I can totally confirm you that SensAudio.dll has all the right code present for openal.
Yes, but there hasn't to be a single answer in this case (they all are different games, sharing no code in common). |
Ohh, you mean like with the router, right? I'm so used to just replacing OpenAL32.dll that I keep forgetting that's a thing.
Yup
Nope, I had deleted it to narrow down the libraries loaded to only the ones I'm testing/using.
Shame. So close.., |
To point out, commit 62b6a61 (or 32a76db) adds options to override the vendor (and version, and renderer) strings. Setting either the
in the |
That sounds like a crash worth reporting
I know, but I was grasping at straws for MOV
Can't believe this is what it took to get it after 2 years (even though AFAICT it's really just AL_VENDOR and alcDefaultName that make a difference, everything else seems kinda random).
Actually, what I had in mind in #757 was some kind of "automatic tracking of the current default device". |
This is the first proof I can recall of seeing it happen. And it's still not something I really like doing, since even though an app can do this to unnecessarily lock feature support to specific vendors, another app may do it "properly" to avoid a buggy feature from specific vendors or to detect vendor-specific behavior. It's a double-edged sword. Leaving the override in place, either on accident or through apathy, can cause difficult-to-track misbehavior (e.g. checking for the vendor being "Creative" to determine whether the 32-bit MCFORMATS formats are integer, as Creative implemented them, or float, as OpenAL Soft does) just as easily as allowing it to access missing features (e.g. only enable EAX when the vendor is "Creative"). |
That there is a vendor check (well, and EAX3.0 reported as "present" even if not necessarily supported) for openal to be loaded at all? Yeah.
Even if that was the case, I'm pretty sure that could be special cased for those few dumb applications if found. But until yesterday I was hoping at most we could get away with it at most just by including the "Audigy" string in the name (which isn't exactly ideal, but at the same time it would still give you freedom about any other character in the name).
Why would EAX, an extra feature that you use only if wanted, have to be hideable? |
@kcat Thanks, that did the trick! Just Cause even needs the other compat flag because the HRTF is upside down (even when using the built-in Sensaura one or X-Fi hardware in XP lol) which means only with OpenAL Soft 3D audio can sound right in this game so thanks for that too👍 [game_compat]
reverse-y=true
vendor-override=Creative Labs Inc. @mirh It still doesn't trigger OpenAL in Men of Valor (even with the router and "Audigy" device or my X-Fi or with XP compat) btw I noticed something interesting in Bioshock:
I also tried to run both games in my XP VM but they keep crashing on startup/main menu. 😔 |
I know this is not the right place, maybe this issue should be closed because it is completely off topic now. Anyway, It seems that Fallout 3 uses DirectSound3D (as well as New Vegas), or at least that's what they say on the web. It's very strange because these games came out in late 2008 and late 2010 respectively. I don't think they use EAX. This game needs a good remaster, the PC port is broken without mods... |
Someone in our server who's been testing games in an XP rig with an X-Fi Titanium Fatal1ty Champion may have confirmed my suspicion: There's just no EAX reverb in BioShock (original or remaster) and instead just uses FMOD for it. Just like in my experiments, he didn't notice any difference in the reverb whether the in-game EAX option was enabled or disabled, though he did notice it improved the amount of sounds that could be played at once, so I guess that's the only important benefit from the "EAX" option (actually just DS3D/OAL), besides virtualizing the game's surround mix (no 3D audio either, even in Stereo mode). @kcat do these lines tell you anything about what the game's doing with EAX? DSOAL:
wrap_oal + DSOAL:
wrap_oal + DSOAL (Windows XP compatibility):
So if this is conclusive evidence of the game not actually using EAX reverb, then I agree we should put this issue to rest. |
It looks like EAX reverb and associated properties are being set. What exactly they're being set to, I have no idea. I see it expressly setting the "Room" listener/fxslot and source property (reverb and send volume), along with a few "all parameters". If the game uses OpenAL natively though, and you're wrapping it through wrap_oal -> DSOAL -> OpenAL Soft, then aside from what they're being set to, there's not much to say what's making these EAX calls (if it's the game trying to set these that are passing through wrap_oal, or if wrap_oal itself is setting them for some reason). |
Could Bioshock only be using EAX to gain hardware-acceleration for certain effects to take some burden off the CPU (I assume it's mostly single-threaded as most games were at the time)? Maybe the listening test shouldn't focus on the behavior of single reverb effects but rather special cases that would make use of more advanced EAX features, such as smoothing between presets, environmental occlusion, environmental panning, multiple simultaneous environmental reverb effects, or special effects like flanger. Or maybe the EAX option only exists so one can have fun with EAX Voice in Rapture? 🤡 |
Using OpenAL Soft v1.23.1 with Bioshock (classic).
Game has working audio but in-game EAX toggle is greyed out.
Log file shows:
[ALSOFT] (EE) EAXSet [EAX_FX_SLOT] Flags out of range (value: 3; min: 0; max: 1)
Full log here:
bioshock.log
Game is listed as using EAX 5.0 which, as far as I know, every implementation has been using Creative's OpenAL.
The text was updated successfully, but these errors were encountered: