kcat / openal-soft

OpenAL Soft is a software implementation of the OpenAL 3D audio API.
Other
2.23k stars 536 forks source link

Unreal Tournament 2004 - No sound with EAX enabled #1000

Closed kcajjones closed 5 months ago

kcajjones commented 5 months ago

In UT2004 with the Creative OpenAL + EAX 5.0 Patch, OpenAL Soft v1.23.1 OpenAL32.dll in system folder, audio works in "H/W 3D" mode but not when using "H/W 3D + EAX".

Running Windows 11 with sound output via HDMI from GTX 1080ti to Onkyo TX-SR705 AVR in 5.1 channel 44100hz 16bit.

In the log, the game starts in hardware 3D audio mode then I change it to hardware 3D audio + EAX mode. ALsoft Log: ALSOFT_UT2004.log

UT2004 Log: UT2004.log

kcajjones commented 5 months ago

Just playing around with configuration and increased the default 256 sound sources to 512 sound sources seems to have fixed the issue.

kcat commented 5 months ago

Interesting. I'm not aware of any hardware EAX device that supported more than 256 sources, and some only supported 128 or less. It working when raising the source limit to 512 feels like it's working around some other issue.

You say it works when set to normal hardware 3D mode, and only stops working when EAX is enabled. The UT2004 log shows:

Log: ALAudio: AL_OUT_OF_MEMORY in Init (creating transient source)
Error: ALAudio: couldn't allocate transient source
Error: Audio initialization failed.

The "transient source" bit there is interesting. I know when using EAX with DirectSound3D, it was common practice to create a DSound buffer (OpenAL source analog) just for controlling listener and global effect EAX properties, due to a quirk in how driver-specific EAX functionality is accessed. EAX with OpenAL doesn't require that, but I wonder if the engine still behaves that way for legacy reasons.

Additionally, with hardware the number of available sources was constrained by the number of channels each source uses; for instance, a device with 256 hardware voices meant it could play up to 256 channels, so a stereo sound would take 2 voices and leave 254 for mono sounds. OpenAL Soft doesn't consider the number of channels, so with a limit of 256 sources, a stereo sound would only take 1 and leave 255 for mono sounds. Perhaps the engine is getting confused by that, thinking it should be able to allocate up to mono_sources + stereo_sources*2. In this case, stereo_sources is typically 1 by default, so it could allocate mono_sources + stereo_sources and then get an extra "transient source" for EAX, as long as it doesn't try to play more than mono_sources + stereo_sources at once.

kcajjones commented 5 months ago

Interesting.I know little about coding but it sounds plausible. As far as I remember from owning an Xfi card, they were hardware limited to 128 sources. I'm happy to test any new implementation as EAX fascinates me.