OpenRift412: Despite being a newer release, Hexen II also has the same problem that Quake has on GOG. While there is a provided remedy for playing CD music without the need for a CD, the problem is that the music doesn't LOOP. There are workarounds for this, but I would like to see GOG address this themselves and see what they can do about it.
EDIT: For some reason it... works now?? I dunno, I think it might vary per-person.
Sometimes it works, sometimes it doesn't, but it's possible to reproduce it.
In short:
If a track gets carried over a loading screen (ANY loading screen, quickload, new game, map transition, etc.), it will stop looping properly.
If the track is changed after the loading screen, it's all fine.
Compatibility settings seem to make no difference in this regard.
WARNING: WALL OF TEXT AHEAD
Read only if you want to to reproduce and understand the issue. It's so long and detailed because I want to be as clear as possible.
I don't encourage you to take my word, I recommend to try this and see what outcome you have.
First of all, make sure you have really set the Music Type to CD and not Midi.
Now let's have a look at a few console commands.
"cd info" - shows you which track is currently playing or looping
"cd loop X" - sets a certain track to loop, with X being any number between 2 and 17
And a few maps and the track that is assigned to them:
demo1 (Blackmarsh) - track2
demo2 (Barbican) - track3
demo3 (The Mill) - track2
Here is what I observed:
If you start the h2.exe and then start a new game, track 2 is set to loop. And it will loop, over and over and over (it's roughly 3 minutes long, I advise you to use a stopwatch to keep track).
If you leave Blackmarsh (the first map, which is demo1) to Barbican (demo2, you can also use console commands to switch maps), track 3 will be set to loop. It will remain on loop, no problems here.
Now go back to Blackmarsh (demo1) and track 2 will start looping again, everything will be fine.
So where does the issue start?
Leave Blackmarsh (demo1) for The Mill (demo3). Track 2 will remain on loop (it won't restart), but once it ends, it will be silent. You can use "cd info" if you want after it goes silent, but the game will tell you it's still looping. Well, it's obviously not, at least it doesn't sound like it.
Same if you start a new game and then start another one after that. Or enter a new map and then quicksave and quickload.
In short, every instance where the music continues playing without interruption during the loading screen.
The problem seems to be that if let's say track 2 is already looping and you tell the game again to loop it ("cd loop 2"), it doesn't restart the track, it just goes on because it's already playing.
So in case of demo1, you can't restart it by typing in "cd loop 2". It will remain silent (the game thinks it's still looping track 2 anyway). However, if you switch tracks (for example, first "cd loop 3" and then "cd loop 2" again) or reset it ("cd reset", followed by "cd loop 2"), it will work.
In order to avoid problems with quickloading, I use a custom quickload button.
Usually it's this in the config file: bind "F9" "echo quickloading...; wait; load quick"
I changed it to this: bind "F9" "echo quickloading...; cd reset; wait; load quick"
And if the music dies, quicksave followed by quickload will restart it properly.
But yes, I would also prefer a proper fix for this without using a source port because I'm quite a purist when it comes to Quake engine games. And I think considering how this seems to work, it's quite safe to say that it's not an intentional feature. It also doesn't happen with MIDI music.