Research only, no code changes. Captures why the pods play in stereo and
what it would take to drive a 4-speaker (quad) rig on Win10/11.
Key findings:
- "Channels" is ambiguous in this codebase: 32 mixer voices (Adept splits
them 1 VO / 2 music / 1 Betty / 6 mechanical / 21 spatialized SFX) versus
the speaker output, which is hardcoded stereo at 22050 Hz.
- The blocker is DS3DALG_HRTF_LIGHT, a two-speaker head model, requested
unconditionally because dwFreeHw3DAllBuffers is always 0 on Vista+ where
DirectSound hardware acceleration no longer exists. hardwaremixing=true
is therefore inert, and the EAX reverb path has been dead since XP.
- GameOS has a full gosAudio_SetSpeakerConfig API that nothing ever calls.
GetSpeakerConfig also has no 5.1 case, so it returns 0 on such systems.
- Cheapest route is DSOAL (drop-in dsound.dll over OpenAL Soft) plus
hardwaremixing=true, which re-enables the existing hardware-3D branch
with no code change. Verified in source that Libraries.cpp:376 calls
LoadLibrary("dsound.dll") unqualified, and dsound.dll is not a KnownDLL,
so a local copy next to MW4.exe wins over System32.
- Same deployment rule as dgVoodoo2: per-machine Win10/11 prerequisite,
must NOT be committed, XP pods need the native dsound.dll.
Also documents the reverted fallback design (a third NO_VIRTUALIZATION
branch, a -tspk override and a gos-audio.txt trace) as a re-implementation
recipe, plus a verification plan and caveats.
Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com>
Co-authored-by: GitHub Copilot <copilot@github.com>