Disable audio virtualization on special audio sources such as music and ambient sounds

This prevents the music from being muffled by HRTF virtualization
This commit is contained in:
smallmodel 2025-01-01 23:48:02 +01:00
parent a067c58b3d
commit 869075f47b
No known key found for this signature in database
GPG key ID: A96F163ED4891440
2 changed files with 45 additions and 4 deletions

View file

@ -646,6 +646,17 @@ qboolean S_OPENAL_Init()
return false;
}
//
// Disable sound virtualization on special channels
// (triggered music, ambient sounds...)
//
for (i = 0; i < MAX_SOUNDSYSTEM_SONGS; i++) {
openal.chan_song[i].set_no_virtualization();
}
openal.chan_mp3.set_no_virtualization();
openal.chan_trig_music.set_no_virtualization();
openal.chan_movie.set_no_virtualization();
Cmd_AddCommand("playmp3", S_OPENAL_PlayMP3);
Cmd_AddCommand("stopmp3", S_OPENAL_StopMP3);
Cmd_AddCommand("loadsoundtrack", S_loadsoundtrack);
@ -1366,16 +1377,15 @@ static void S_OPENAL_Start2DSound(
pChannel->iBaseRate = pChannel->sample_playback_rate();
pChannel->set_no_3d();
fRealVolume = fRealVolume * s_fVolumeGain;
pChannel->set_gain(fRealVolume);
pChannel->play();
} else {
pChannel->stop();
pChannel->set_no_3d();
pChannel->set_sfx(pSfx);
pChannel->set_gain(fRealVolume);
pChannel->play();
}
pChannel->set_gain(fRealVolume);
pChannel->play();
if (s_show_sounds->integer > 0) {
Com_DPrintf(
"OpenAL: 2D - %d (#%i) - %s (vol %f, mindist %f, maxdist %f)\n",
@ -2912,6 +2922,35 @@ void openal_channel::play()
alDieIfError();
}
/*
==============
openal_channel::set_no_virtualization
==============
*/
void openal_channel::set_no_virtualization()
{
#if AL_SOFT_direct_channels_remix
qalSourcei(source, AL_DIRECT_CHANNELS_SOFT, AL_REMIX_UNMATCHED_SOFT);
alDieIfError();
#elif AL_SOFT_direct_channels
qalSourcei(source, AL_DIRECT_CHANNELS_SOFT, AL_TRUE);
alDieIfError();
#endif
}
/*
==============
openal_channel::set_virtualization
==============
*/
void openal_channel::set_virtualization()
{
#if AL_SOFT_direct_channels_remix || AL_SOFT_direct_channels
qalSourcei(source, AL_DIRECT_CHANNELS_SOFT, AL_FALSE);
alDieIfError();
#endif
}
/*
==============
openal_channel::pause

View file

@ -95,6 +95,8 @@ public:
void set_no_3d();
void set_3d();
void set_no_virtualization();
void set_virtualization();
void set_gain(float gain);
void set_velocity(float v0, float v1, float v2);