about summary refs log tree commit diff
path: root/src/engine/client
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-04-13 20:00:54 +0200
committeroy <Tom_Adams@web.de>2011-04-13 20:00:54 +0200
commit1a5d70450f1de87224334e550706c67ad0cde6b8 (patch)
tree2b39cfbbb5b87c1fcdb6b60dfb780f171e193b60 /src/engine/client
parent2179ae011302ecc48a2289a88cc865cdcb4d9f72 (diff)
downloadzcatch-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.cpp19
-rw-r--r--src/engine/client/sound.h2
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();
 };