]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_main.c
menuqc += +VM_getkeybind, // #342 string(float keynum) getkeybind (EXT_CSQC)
[xonotic/darkplaces.git] / snd_main.c
index 2d456a4abfd881ed22f0df86595df9e073af7002..ce04f8051d93f901a78e01ebbff919b910139bf7 100644 (file)
@@ -157,6 +157,7 @@ spatialmethod_t spatialmethod;
 
 // Cvars declared in sound.h (part of the sound API)
 cvar_t bgmvolume = {CVAR_SAVE, "bgmvolume", "1", "volume of background music (such as CD music or replacement files such as sound/cdtracks/track002.ogg)"};
+cvar_t mastervolume = {CVAR_SAVE, "mastervolume", "0.7", "master volume"};
 cvar_t volume = {CVAR_SAVE, "volume", "0.7", "volume of sound effects"};
 cvar_t snd_initialized = { CVAR_READONLY, "snd_initialized", "0", "indicates the sound subsystem is active"};
 cvar_t snd_staticvolume = {CVAR_SAVE, "snd_staticvolume", "1", "volume of ambient sound effects (such as swampy sounds at the start of e1m2)"};
@@ -771,6 +772,7 @@ void S_Init(void)
 {
        Cvar_RegisterVariable(&volume);
        Cvar_RegisterVariable(&bgmvolume);
+       Cvar_RegisterVariable(&mastervolume);
        Cvar_RegisterVariable(&snd_staticvolume);
        Cvar_RegisterVariable(&snd_entchannel0volume);
        Cvar_RegisterVariable(&snd_entchannel1volume);
@@ -1100,6 +1102,27 @@ sfx_t *S_PrecacheSound (const char *name, qboolean complain, qboolean serversoun
        return sfx;
 }
 
+/*
+==================
+S_SoundLength
+==================
+*/
+
+float S_SoundLength(const char *name)
+{
+       sfx_t *sfx;
+
+       if (!snd_initialized.integer)
+               return -1;
+       if (name == NULL || name[0] == 0)
+               return -1;
+
+       sfx = S_FindName(name);
+       if (sfx == NULL)
+               return -1;
+       return sfx->total_length / (float) S_GetSoundRate();
+}
+
 /*
 ==================
 S_IsSoundPrecached
@@ -1671,7 +1694,19 @@ float S_GetChannelPosition (unsigned int ch_ind)
        return (s % sfx->total_length) / (float) S_GetSoundRate();
 }
 
+float S_GetEntChannelPosition(int entnum, int entchannel)
+{
+       channel_t *ch;
+       unsigned int i;
 
+       for (i = 0; i < total_channels; i++)
+       {
+               ch = &channels[i];
+               if (ch->entnum == entnum && ch->entchannel == entchannel)
+                       return S_GetChannelPosition(i);
+       }
+       return -1; // no playing sound in this channel
+}
 
 /*
 =================