I figured out a solution to this after messing with the retail copy of Cold Shadow and a GOG copy of another CDDA game, and figured I'd share it here.
GOG releases of old games that used "red book" CD audio use a modified version of winmm.dll designed to play OGG files on disk whenever the game tries to play CD audio.
Wine and CrossOver ignore this modified winmm.dll file and try to use their own modified winmm.dll file which will actually try to play CD audio. So, problem solved, just use winecfg and add an override so it uses the included winmm.dll, right?
Well, not exactly. winmm-ogg doesn't play nice under wine, and while you will have audio, the video will no longer display. Ack!
Instead, use CDEmu to mount a blank CD+R file:
cdemu create-blank --writer-id=WRITER-TOC --medium-type=cdr80 --param="writer.write_raw=1" --param="writer.write_subchannel=1" 0 ~/COLDSHDW.TOC
Using your favorite CD burner (I use K3b!) "burn" the soundtrack in the /MUSIC/ folder to the virtual disk. Make sure the first track is one of the sound effects from DIGSNDS instead, because the game expects the first track to have game data.
This will give you a TOC file and 24 BIN files with the actual CD audio. Unmount the virtual disk with this command:
cdemu unload 0
and move these files to somewhere you like. (I recommend making a "CD" folder inside the Cold Shadow installation folder.)
Next, mount this CD image with CDEmu:
cdemu load 0 COLDSHDW.TOC
You can play the disk in VLC to test it.
If you don't have a real disk drive, this should work out of the box. If you do, though, you'll need to change which drive Wine mounts first. Head to your WINEPREFIX and go to the folder named dosdevices. Delete every file except for "c:".
This is the hard part: find out which /dev/ device is the virtual CD that you mounted with CDEmu. For example, since I have a real CD device at /dev/sr0, the CDEmu device is /dev/sr1. You need to symlink this drive to your dosdevices folder as "d::". The double colons are imperitive, as this tells Wine that this is a real physical series of bytes and not a mounted on-filesystem partition.
The game should have audio now! When you're done, unload the cd with "cdemu unload 0". If you want this to happen automatically, you can create a Lutris entry for your game and add pre-launch and post-exit scripts to do this for you.
Post edited January 13, 2025 by Orangestar