diff options
| author | oy <Tom_Adams@web.de> | 2011-04-13 20:00:54 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2011-04-13 20:00:54 +0200 |
| commit | 1a5d70450f1de87224334e550706c67ad0cde6b8 (patch) | |
| tree | 2b39cfbbb5b87c1fcdb6b60dfb780f171e193b60 /src/engine/client | |
| parent | 2179ae011302ecc48a2289a88cc865cdcb4d9f72 (diff) | |
| download | zcatch-1a5d70450f1de87224334e550706c67ad0cde6b8.tar.gz zcatch-1a5d70450f1de87224334e550706c67ad0cde6b8.zip | |
added "reimplemented menu music by teetow-the-great-teetow" by Choupom
Diffstat (limited to 'src/engine/client')
| -rw-r--r-- | src/engine/client/sound.cpp | 19 | ||||
| -rw-r--r-- | src/engine/client/sound.h | 2 |
2 files changed, 15 insertions, 6 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(); }; |