diff options
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/client/sound.cpp | 19 | ||||
| -rw-r--r-- | src/engine/client/sound.h | 2 | ||||
| -rw-r--r-- | src/engine/shared/config_variables.h | 1 | ||||
| -rw-r--r-- | src/engine/sound.h | 6 |
4 files changed, 19 insertions, 9 deletions
diff --git a/src/engine/client/sound.cpp b/src/engine/client/sound.cpp index 55ca2939..4678bb8a 100644 --- a/src/engine/client/sound.cpp +++ b/src/engine/client/sound.cpp @@ -157,8 +157,12 @@ static void Mix(short *pFinalOut, unsigned Frames) // free voice if not used any more if(v->m_Tick == v->m_pSample->m_NumFrames) - v->m_pSample = 0; - + { + if(v->m_Flags&ISound::FLAG_LOOP) + v->m_Tick = 0; + else + v->m_pSample = 0; + } } } @@ -410,7 +414,7 @@ void CSound::SetListenerPos(float x, float y) m_CenterX = (int)x; m_CenterY = (int)y; } - + void CSound::SetChannel(int ChannelID, float Vol, float Pan) { @@ -463,11 +467,16 @@ int CSound::Play(int ChannelID, int SampleID, int Flags) return Play(ChannelID, SampleID, Flags, 0, 0); } -void CSound::Stop(int VoiceID) +void CSound::Stop(int SampleID) { // TODO: a nice fade out lock_wait(m_SoundLock); - m_aVoices[VoiceID].m_pSample = 0; + CSample *pSample = &m_aSamples[SampleID]; + for(int i = 0; i < NUM_VOICES; i++) + { + if(m_aVoices[i].m_pSample == pSample) + m_aVoices[i].m_pSample = 0; + } lock_release(m_SoundLock); } diff --git a/src/engine/client/sound.h b/src/engine/client/sound.h index 0c45f1ab..3cc84d4d 100644 --- a/src/engine/client/sound.h +++ b/src/engine/client/sound.h @@ -31,7 +31,7 @@ public: int Play(int ChannelID, int SampleID, int Flags, float x, float y); virtual int PlayAt(int ChannelID, int SampleID, int Flags, float x, float y); virtual int Play(int ChannelID, int SampleID, int Flags); - virtual void Stop(int VoiceID); + virtual void Stop(int SampleID); virtual void StopAll(); }; diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h index c30edeaf..85749405 100644 --- a/src/engine/shared/config_variables.h +++ b/src/engine/shared/config_variables.h @@ -47,6 +47,7 @@ MACRO_CONFIG_INT(BrMaxRequests, br_max_requests, 25, 0, 1000, CFGFLAG_SAVE|CFGFL MACRO_CONFIG_INT(SndBufferSize, snd_buffer_size, 512, 0, 0, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Sound buffer size") MACRO_CONFIG_INT(SndRate, snd_rate, 48000, 0, 0, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Sound mixing rate") MACRO_CONFIG_INT(SndEnable, snd_enable, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Sound enable") +MACRO_CONFIG_INT(SndMusic, snd_enable_music, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Play background music") MACRO_CONFIG_INT(SndVolume, snd_volume, 100, 0, 100, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Sound volume") MACRO_CONFIG_INT(SndDevice, snd_device, -1, 0, 0, CFGFLAG_SAVE|CFGFLAG_CLIENT, "(deprecated) Sound device to use") diff --git a/src/engine/sound.h b/src/engine/sound.h index 8f5dab24..ac4aeaf5 100644 --- a/src/engine/sound.h +++ b/src/engine/sound.h @@ -21,9 +21,9 @@ public: virtual void SetChannel(int ChannelID, float Volume, float Panning) = 0; virtual void SetListenerPos(float x, float y) = 0; - virtual int PlayAt(int ChannelID, int SoundID, int Flags, float x, float y) = 0; - virtual int Play(int ChannelID, int SoundID, int Flags) = 0; - virtual void Stop(int VoiceID) = 0; + virtual int PlayAt(int ChannelID, int SampleID, int Flags, float x, float y) = 0; + virtual int Play(int ChannelID, int SampleID, int Flags) = 0; + virtual void Stop(int SampleID) = 0; virtual void StopAll() = 0; }; |