[chocolate-doom] 42/83: Cycle round sound channels to stop reuse and conflicts of channel numbers. Add debug to detect when incorrect sound handles are used.
Jonathan Dowland
jmtd at moszumanska.debian.org
Mon Jan 30 15:06:24 UTC 2017
This is an automated email from the git hooks/post-receive script.
jmtd pushed a commit to annotated tag chocolate-doom-0.0.1
in repository chocolate-doom.
commit 0ff16d8ff1d13bb7793aa5fbfee6b6a364397a1d
Author: Simon Howard <fraggle at gmail.com>
Date: Sun Aug 7 19:21:01 2005 +0000
Cycle round sound channels to stop reuse and conflicts of channel
numbers. Add debug to detect when incorrect sound handles are used.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 48
---
src/i_sound.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 65 insertions(+), 5 deletions(-)
diff --git a/src/i_sound.c b/src/i_sound.c
index 2b1ef9b..0ab1267 100644
--- a/src/i_sound.c
+++ b/src/i_sound.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: i_sound.c 43 2005-08-06 17:05:51Z fraggle $
+// $Id: i_sound.c 48 2005-08-07 19:21:01Z fraggle $
//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 2005 Simon Howard
@@ -22,6 +22,10 @@
// 02111-1307, USA.
//
// $Log$
+// Revision 1.9 2005/08/07 19:21:01 fraggle
+// Cycle round sound channels to stop reuse and conflicts of channel
+// numbers. Add debug to detect when incorrect sound handles are used.
+//
// Revision 1.8 2005/08/06 17:05:51 fraggle
// Remove debug messages, send error messages to stderr
// Fix overflow when playing large sound files
@@ -55,7 +59,7 @@
//-----------------------------------------------------------------------------
static const char
-rcsid[] = "$Id: i_sound.c 43 2005-08-06 17:05:51Z fraggle $";
+rcsid[] = "$Id: i_sound.c 48 2005-08-07 19:21:01Z fraggle $";
#include <stdio.h>
#include <stdlib.h>
@@ -73,11 +77,14 @@ rcsid[] = "$Id: i_sound.c 43 2005-08-06 17:05:51Z fraggle $";
#include "doomdef.h"
-#define NUM_CHANNELS 8
+#define NUM_CHANNELS 16
static int sound_initialised = 0;
static Mix_Chunk sound_chunks[NUMSFX];
+static int sounds_in_use[256];
+static int nextchannel = 0;
+
static byte *expand_sound_data(byte *data, int samplerate, int length)
{
byte *result = data;
@@ -185,6 +192,8 @@ int I_GetSfxLumpNum(sfxinfo_t* sfx)
return W_GetNumForName(namebuf);
}
+static int soundtag = 0;
+
//
// Starting a sound means adding it
// to the current list of active sounds
@@ -208,8 +217,34 @@ I_StartSound
Mix_Chunk *chunk = getsfx(id);
int channel;
- channel = Mix_PlayChannelTimed(-1, chunk, 0, -1);
+ // find a free channel, starting from the first after
+ // the last channel we used
+
+ channel = nextchannel;
+
+ do
+ {
+ channel = (channel + 1) % NUM_CHANNELS;
+
+ if (channel == nextchannel)
+ {
+ fprintf(stderr, "No free sound channels left.\n");
+ return -1;
+ }
+ } while (Mix_Playing(channel));
+
+ nextchannel = channel;
+
+ // play sound
+
+ Mix_PlayChannelTimed(channel, chunk, 0, -1);
+
+ sounds_in_use[channel] = soundtag;
+ channel |= soundtag << 8;
+ soundtag++;
+ // set separation, etc.
+
I_UpdateSoundParams(channel, vol, sep, pitch);
return channel;
@@ -219,12 +254,27 @@ I_StartSound
void I_StopSound (int handle)
{
+ int tag = handle >> 8;
+
+ handle &= 0xff;
+
+ if (sounds_in_use[handle] != tag)
+ {
+ fprintf(stderr,
+ "stopping wrong sound: %i != %i (%i)\n",
+ sounds_in_use[handle], tag,
+ handle);
+ }
+
+ sounds_in_use[handle] = -1;
+
Mix_HaltChannel(handle);
}
int I_SoundIsPlaying(int handle)
{
+ handle &= 0xff;
return Mix_Playing(handle);
}
@@ -271,6 +321,16 @@ I_UpdateSoundParams
int sep,
int pitch)
{
+ int tag = handle >> 8;
+
+ handle &= 0xff;
+
+ if (sounds_in_use[handle] != tag)
+ {
+ fprintf(stderr,
+ "tag is wrong for playing sound: %i, %i\n", tag, handle);
+ }
+
Mix_SetPanning(handle,
((254 - sep) * vol) / 8,
((sep) * vol) / 8);
@@ -307,7 +367,7 @@ I_InitSound()
fprintf(stderr, "Error initialising SDL_mixer: %s\n", SDL_GetError());
}
- Mix_AllocateChannels(16);
+ Mix_AllocateChannels(NUM_CHANNELS);
sound_initialised = 1;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/chocolate-doom.git
More information about the Pkg-games-commits
mailing list