X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=snd_main.c;h=ce04f8051d93f901a78e01ebbff919b910139bf7;hp=2d456a4abfd881ed22f0df86595df9e073af7002;hb=9e2930c2fa043bbc2fe78735984fe6cc4d174534;hpb=3d164924a905fa9a5486f412fd1df10c3c3e9edf diff --git a/snd_main.c b/snd_main.c index 2d456a4a..ce04f805 100644 --- a/snd_main.c +++ b/snd_main.c @@ -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 +} /* =================