X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=cd_shared.c;h=bce1c14b4fa45769dfd8e7471b4674d1d97815d5;hb=d754c759a9c59ed3c2cb1b3f68c204f9e6e2e354;hp=a7919448c805f3fcd4f631cc9341b7495ad5f119;hpb=543e06fbc28e7930b50d08c4db9c1b45e48acbc7;p=xonotic%2Fdarkplaces.git diff --git a/cd_shared.c b/cd_shared.c index a7919448..bce1c14b 100644 --- a/cd_shared.c +++ b/cd_shared.c @@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern void CDAudio_SysEject (void); extern void CDAudio_SysCloseDoor (void); extern int CDAudio_SysGetAudioDiskInfo (void); +extern float CDAudio_SysGetVolume (void); +extern void CDAudio_SysSetVolume (float volume); extern int CDAudio_SysPlay (qbyte track); extern int CDAudio_SysStop (void); extern int CDAudio_SysPause (void); @@ -46,6 +48,8 @@ static qbyte remap[100]; static qbyte maxTrack; static int faketrack = -1; +static float saved_vol = 1.0f; + // exported variables qboolean cdValid = false; qboolean cdPlaying = false; @@ -109,7 +113,7 @@ void CDAudio_Play (qbyte track, qboolean looping) sfx = S_PrecacheSound (va ("cdtracks/track%02u.wav", track), false); if (sfx != NULL) { - faketrack = S_StartSound (-1, 0, sfx, vec3_origin, 1, 0); + faketrack = S_StartSound (-1, 0, sfx, vec3_origin, cdvolume, 0); if (faketrack != -1) { if (looping) @@ -133,7 +137,7 @@ void CDAudio_Play (qbyte track, qboolean looping) if (track > maxTrack) { - Con_DPrintf("CDAudio: Bad track number %u.\n", track); + Con_Printf("CDAudio: Bad track number %u.\n", track); return; } @@ -184,7 +188,7 @@ void CDAudio_Pause (void) void CDAudio_Resume (void) { - if (!enabled || !wasPlaying) + if (!enabled || cdPlaying || !wasPlaying) return; if (faketrack != -1) @@ -306,27 +310,36 @@ static void CD_f (void) } } -void CDAudio_Update (void) +void CDAudio_SetVolume (float newvol) { - if (!enabled) + // If the volume hasn't changed + if (newvol == cdvolume) return; - if (bgmvolume.value != cdvolume) + // If the CD has been muted + if (newvol == 0.0f) + CDAudio_Pause (); + else { - if (cdvolume) - { - Cvar_SetValueQuick (&bgmvolume, 0.0); - cdvolume = bgmvolume.value; - CDAudio_Pause (); - } - else - { - Cvar_SetValueQuick (&bgmvolume, 1.0); - cdvolume = bgmvolume.value; + // If the CD has been unmuted + if (cdvolume == 0.0f) CDAudio_Resume (); - } + + if (faketrack != -1) + S_SetChannelVolume (faketrack, newvol); + CDAudio_SysSetVolume (newvol); } + cdvolume = newvol; +} + +void CDAudio_Update (void) +{ + if (!enabled) + return; + + CDAudio_SetVolume (bgmvolume.value); + if (faketrack == -1) CDAudio_SysUpdate(); } @@ -365,6 +378,15 @@ int CDAudio_Startup (void) cdValid = false; } + saved_vol = CDAudio_SysGetVolume (); + if (saved_vol < 0.0f) + { + Con_DPrint ("Can't get initial CD volume\n"); + saved_vol = 1.0f; + } + else + Con_DPrintf ("Initial CD volume: %g\n", saved_vol); + initialized = true; Con_DPrint("CD Audio Initialized\n"); @@ -376,6 +398,9 @@ void CDAudio_Shutdown (void) { if (!initialized) return; + + CDAudio_SysSetVolume (saved_vol); + CDAudio_Stop(); CDAudio_SysShutdown(); initialized = false;