summaryrefslogtreecommitdiff
path: root/src/hexen/i_sound.c
diff options
context:
space:
mode:
authorSimon Howard2008-09-05 00:02:14 +0000
committerSimon Howard2008-09-05 00:02:14 +0000
commitc7ddc423f67236a99956960cf9fe89abf077839b (patch)
tree61322034e9d75f1c1a409d1e14ca21ee5c6025c2 /src/hexen/i_sound.c
parent0774dce204c2c01622c59819e2a29590a1b50e46 (diff)
downloadchocolate-doom-c7ddc423f67236a99956960cf9fe89abf077839b.tar.gz
chocolate-doom-c7ddc423f67236a99956960cf9fe89abf077839b.tar.bz2
chocolate-doom-c7ddc423f67236a99956960cf9fe89abf077839b.zip
Reformat (beautify) Raven sources and add GPL headers.
Subversion-branch: /branches/raven-branch Subversion-revision: 1197
Diffstat (limited to 'src/hexen/i_sound.c')
-rw-r--r--src/hexen/i_sound.c776
1 files changed, 407 insertions, 369 deletions
diff --git a/src/hexen/i_sound.c b/src/hexen/i_sound.c
index 72da70bd..bd22304c 100644
--- a/src/hexen/i_sound.c
+++ b/src/hexen/i_sound.c
@@ -1,369 +1,407 @@
-
-// I_SOUND.C
-
-#include <stdio.h>
-#include "h2def.h"
-#include "dmx.h"
-#include "sounds.h"
-#include "i_sound.h"
-
-/*
-===============
-=
-= I_StartupTimer
-=
-===============
-*/
-
-int tsm_ID = -1;
-
-void I_StartupTimer (void)
-{
-#ifndef NOTIMER
- extern int I_TimerISR(void);
-
- ST_Message(" I_StartupTimer()\n");
- // installs master timer. Must be done before StartupTimer()!
- TSM_Install(SND_TICRATE);
- tsm_ID = TSM_NewService (I_TimerISR, 35, 255, 0); // max priority
- if (tsm_ID == -1)
- {
- I_Error("Can't register 35 Hz timer w/ DMX library");
- }
-#endif
-}
-
-void I_ShutdownTimer (void)
-{
- TSM_DelService(tsm_ID);
- TSM_Remove();
-}
-
-/*
- *
- * SOUND HEADER & DATA
- *
- *
- */
-
-// sound information
-#if 0
-const char *dnames[] = {"None",
- "PC_Speaker",
- "Adlib",
- "Sound_Blaster",
- "ProAudio_Spectrum16",
- "Gravis_Ultrasound",
- "MPU",
- "AWE32"
- };
-#endif
-
-const char snd_prefixen[] = { 'P', 'P', 'A', 'S', 'S', 'S', 'M',
- 'M', 'M', 'S' };
-
-int snd_Channels;
-int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
-int snd_MusicDevice, // current music card # (index to dmxCodes)
- snd_SfxDevice, // current sfx card # (index to dmxCodes)
- snd_MaxVolume, // maximum volume for sound
- snd_MusicVolume; // maximum volume for music
-int dmxCodes[NUM_SCARDS]; // the dmx code for a given card
-
-int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
-int snd_Mport; // midi variables
-
-extern boolean snd_MusicAvail, // whether music is available
- snd_SfxAvail; // whether sfx are available
-
-void I_PauseSong(int handle)
-{
- MUS_PauseSong(handle);
-}
-
-void I_ResumeSong(int handle)
-{
- MUS_ResumeSong(handle);
-}
-
-void I_SetMusicVolume(int volume)
-{
- MUS_SetMasterVolume(volume*8);
-// snd_MusicVolume = volume;
-}
-
-void I_SetSfxVolume(int volume)
-{
- snd_MaxVolume = volume; // THROW AWAY?
-}
-
-/*
- *
- * SONG API
- *
- */
-
-int I_RegisterSong(void *data)
-{
- int rc = MUS_RegisterSong(data);
-#ifdef SNDDEBUG
- if (rc<0) ST_Message(" MUS_Reg() returned %d\n", rc);
-#endif
- return rc;
-}
-
-void I_UnRegisterSong(int handle)
-{
- int rc = MUS_UnregisterSong(handle);
-#ifdef SNDDEBUG
- if (rc < 0) ST_Message(" MUS_Unreg() returned %d\n", rc);
-#endif
-}
-
-int I_QrySongPlaying(int handle)
-{
- int rc = MUS_QrySongPlaying(handle);
-#ifdef SNDDEBUG
- if (rc < 0) ST_Message(" MUS_QrySP() returned %d\n", rc);
-#endif
- return rc;
-}
-
-// Stops a song. MUST be called before I_UnregisterSong().
-
-void I_StopSong(int handle)
-{
- int rc;
- rc = MUS_StopSong(handle);
-#ifdef SNDDEBUG
- if (rc < 0) ST_Message(" MUS_StopSong() returned %d\n", rc);
-#endif
-/*
- // Fucking kluge pause
- {
- int s;
- extern volatile int ticcount;
- for (s=ticcount ; ticcount - s < 10 ; );
- }
-*/
-}
-
-void I_PlaySong(int handle, boolean looping)
-{
- int rc;
- rc = MUS_ChainSong(handle, looping ? handle : -1);
-#ifdef SNDDEBUG
- if (rc < 0) ST_Message(" MUS_ChainSong() returned %d\n", rc);
-#endif
- rc = MUS_PlaySong(handle, snd_MusicVolume);
-#ifdef SNDDEBUG
- if (rc < 0) ST_Message(" MUS_PlaySong() returned %d\n", rc);
-#endif
-
-}
-
-/*
- *
- * SOUND FX API
- *
- */
-
-// Gets lump nums of the named sound. Returns pointer which will be
-// passed to I_StartSound() when you want to start an SFX. Must be
-// sure to pass this to UngetSoundEffect() so that they can be
-// freed!
-
-
-int I_GetSfxLumpNum(sfxinfo_t *sound)
-{
- return W_GetNumForName(sound->lumpname);
-
-}
-
-int I_StartSound (int id, void *data, int vol, int sep, int pitch, int priority)
-{
- return SFX_PlayPatch(data, pitch, sep, vol, 0, 0);
-}
-
-void I_StopSound(int handle)
-{
-// extern volatile long gDmaCount;
-// long waittocount;
- SFX_StopPatch(handle);
-// waittocount = gDmaCount + 2;
-// while (gDmaCount < waittocount) ;
-}
-
-int I_SoundIsPlaying(int handle)
-{
- return SFX_Playing(handle);
-}
-
-void I_UpdateSoundParams(int handle, int vol, int sep, int pitch)
-{
- SFX_SetOrigin(handle, pitch, sep, vol);
-}
-
-/*
- *
- * SOUND STARTUP STUFF
- *
- *
- */
-
-//
-// Why PC's Suck, Reason #8712
-//
-
-void I_sndArbitrateCards(void)
-{
- char tmp[160];
- boolean gus, adlib, pc, sb, midi;
- int i, rc, mputype, p, opltype, wait, dmxlump;
-
- snd_MusicDevice = snd_DesiredMusicDevice;
- snd_SfxDevice = snd_DesiredSfxDevice;
-
- // check command-line parameters- overrides config file
- //
- if (M_CheckParm("-nosound")) snd_MusicDevice = snd_SfxDevice = snd_none;
- if (M_CheckParm("-nosfx")) snd_SfxDevice = snd_none;
- if (M_CheckParm("-nomusic")) snd_MusicDevice = snd_none;
-
- if (snd_MusicDevice > snd_MPU && snd_MusicDevice <= snd_MPU3)
- snd_MusicDevice = snd_MPU;
- if (snd_MusicDevice == snd_SB)
- snd_MusicDevice = snd_Adlib;
- if (snd_MusicDevice == snd_PAS)
- snd_MusicDevice = snd_Adlib;
-
- // figure out what i've got to initialize
- //
- gus = snd_MusicDevice == snd_GUS || snd_SfxDevice == snd_GUS;
- sb = snd_SfxDevice == snd_SB || snd_MusicDevice == snd_SB;
- adlib = snd_MusicDevice == snd_Adlib ;
- pc = snd_SfxDevice == snd_PC;
- midi = snd_MusicDevice == snd_MPU;
-
- // initialize whatever i've got
- //
- if (gus)
- {
- if (GF1_Detect()) ST_Message(" Dude. The GUS ain't responding.\n");
- else
- {
- dmxlump = W_GetNumForName("dmxgus");
- GF1_SetMap(W_CacheLumpNum(dmxlump, PU_CACHE), lumpinfo[dmxlump].size);
- }
-
- }
- if (sb)
- {
- if(debugmode)
- {
- ST_Message(" Sound cfg p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- }
- if (SB_Detect(&snd_SBport, &snd_SBirq, &snd_SBdma, 0))
- {
- ST_Message(" SB isn't responding at p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- }
- else SB_SetCard(snd_SBport, snd_SBirq, snd_SBdma);
-
- if(debugmode)
- {
- ST_Message(" SB_Detect returned p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- }
- }
-
- if (adlib)
- {
- if (AL_Detect(&wait,0))
- {
- ST_Message(" Dude. The Adlib isn't responding.\n");
- }
- else
- {
- AL_SetCard(wait, W_CacheLumpName("genmidi", PU_STATIC));
- }
- }
-
- if (midi)
- {
- if (debugmode)
- {
- ST_Message(" cfg p=0x%x\n", snd_Mport);
- }
-
- if (MPU_Detect(&snd_Mport, &i))
- {
- ST_Message(" The MPU-401 isn't reponding @ p=0x%x.\n", snd_Mport);
- }
- else MPU_SetCard(snd_Mport);
- }
-
-}
-
-// inits all sound stuff
-
-void I_StartupSound (void)
-{
- int rc, i;
-
- if (debugmode)
- ST_Message("I_StartupSound: Hope you hear a pop.\n");
-
- // initialize dmxCodes[]
- dmxCodes[0] = 0;
- dmxCodes[snd_PC] = AHW_PC_SPEAKER;
- dmxCodes[snd_Adlib] = AHW_ADLIB;
- dmxCodes[snd_SB] = AHW_SOUND_BLASTER;
- dmxCodes[snd_PAS] = AHW_MEDIA_VISION;
- dmxCodes[snd_GUS] = AHW_ULTRA_SOUND;
- dmxCodes[snd_MPU] = AHW_MPU_401;
- dmxCodes[snd_MPU2] = AHW_MPU_401;
- dmxCodes[snd_MPU3] = AHW_MPU_401;
- dmxCodes[snd_AWE] = AHW_AWE32;
- dmxCodes[snd_CDMUSIC] = 0;
-
- // inits sound library timer stuff
- I_StartupTimer();
-
- // pick the sound cards i'm going to use
- //
- I_sndArbitrateCards();
-
- if (debugmode)
- {
- ST_Message(" Music device #%d & dmxCode=%d,", snd_MusicDevice,
- dmxCodes[snd_MusicDevice]);
- ST_Message(" Sfx device #%d & dmxCode=%d\n", snd_SfxDevice,
- dmxCodes[snd_SfxDevice]);
- }
-
- // inits DMX sound library
- ST_Message(" Calling DMX_Init...");
- rc = DMX_Init(SND_TICRATE, SND_MAXSONGS, dmxCodes[snd_MusicDevice],
- dmxCodes[snd_SfxDevice]);
-
- if (debugmode)
- {
- ST_Message(" DMX_Init() returned %d\n", rc);
- }
-
-}
-
-// shuts down all sound stuff
-
-void I_ShutdownSound (void)
-{
- DMX_DeInit();
- I_ShutdownTimer();
-}
-
-void I_SetChannels(int channels)
-{
- WAV_PlayMode(channels, SND_SAMPLERATE);
-}
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+
+// I_SOUND.C
+
+#include <stdio.h>
+#include "h2def.h"
+#include "dmx.h"
+#include "sounds.h"
+#include "i_sound.h"
+
+/*
+===============
+=
+= I_StartupTimer
+=
+===============
+*/
+
+int tsm_ID = -1;
+
+void I_StartupTimer(void)
+{
+#ifndef NOTIMER
+ extern int I_TimerISR(void);
+
+ ST_Message(" I_StartupTimer()\n");
+ // installs master timer. Must be done before StartupTimer()!
+ TSM_Install(SND_TICRATE);
+ tsm_ID = TSM_NewService(I_TimerISR, 35, 255, 0); // max priority
+ if (tsm_ID == -1)
+ {
+ I_Error("Can't register 35 Hz timer w/ DMX library");
+ }
+#endif
+}
+
+void I_ShutdownTimer(void)
+{
+ TSM_DelService(tsm_ID);
+ TSM_Remove();
+}
+
+/*
+ *
+ * SOUND HEADER & DATA
+ *
+ *
+ */
+
+// sound information
+#if 0
+const char *dnames[] = { "None",
+ "PC_Speaker",
+ "Adlib",
+ "Sound_Blaster",
+ "ProAudio_Spectrum16",
+ "Gravis_Ultrasound",
+ "MPU",
+ "AWE32"
+};
+#endif
+
+const char snd_prefixen[] = { 'P', 'P', 'A', 'S', 'S', 'S', 'M',
+ 'M', 'M', 'S'
+};
+
+int snd_Channels;
+int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
+int snd_MusicDevice, // current music card # (index to dmxCodes)
+ snd_SfxDevice, // current sfx card # (index to dmxCodes)
+ snd_MaxVolume, // maximum volume for sound
+ snd_MusicVolume; // maximum volume for music
+int dmxCodes[NUM_SCARDS]; // the dmx code for a given card
+
+int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
+int snd_Mport; // midi variables
+
+extern boolean snd_MusicAvail, // whether music is available
+ snd_SfxAvail; // whether sfx are available
+
+void I_PauseSong(int handle)
+{
+ MUS_PauseSong(handle);
+}
+
+void I_ResumeSong(int handle)
+{
+ MUS_ResumeSong(handle);
+}
+
+void I_SetMusicVolume(int volume)
+{
+ MUS_SetMasterVolume(volume * 8);
+// snd_MusicVolume = volume;
+}
+
+void I_SetSfxVolume(int volume)
+{
+ snd_MaxVolume = volume; // THROW AWAY?
+}
+
+/*
+ *
+ * SONG API
+ *
+ */
+
+int I_RegisterSong(void *data)
+{
+ int rc = MUS_RegisterSong(data);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_Reg() returned %d\n", rc);
+#endif
+ return rc;
+}
+
+void I_UnRegisterSong(int handle)
+{
+ int rc = MUS_UnregisterSong(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_Unreg() returned %d\n", rc);
+#endif
+}
+
+int I_QrySongPlaying(int handle)
+{
+ int rc = MUS_QrySongPlaying(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_QrySP() returned %d\n", rc);
+#endif
+ return rc;
+}
+
+// Stops a song. MUST be called before I_UnregisterSong().
+
+void I_StopSong(int handle)
+{
+ int rc;
+ rc = MUS_StopSong(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_StopSong() returned %d\n", rc);
+#endif
+/*
+ // Fucking kluge pause
+ {
+ int s;
+ extern volatile int ticcount;
+ for (s=ticcount ; ticcount - s < 10 ; );
+ }
+*/
+}
+
+void I_PlaySong(int handle, boolean looping)
+{
+ int rc;
+ rc = MUS_ChainSong(handle, looping ? handle : -1);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_ChainSong() returned %d\n", rc);
+#endif
+ rc = MUS_PlaySong(handle, snd_MusicVolume);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ ST_Message(" MUS_PlaySong() returned %d\n", rc);
+#endif
+
+}
+
+/*
+ *
+ * SOUND FX API
+ *
+ */
+
+// Gets lump nums of the named sound. Returns pointer which will be
+// passed to I_StartSound() when you want to start an SFX. Must be
+// sure to pass this to UngetSoundEffect() so that they can be
+// freed!
+
+
+int I_GetSfxLumpNum(sfxinfo_t * sound)
+{
+ return W_GetNumForName(sound->lumpname);
+
+}
+
+int I_StartSound(int id, void *data, int vol, int sep, int pitch,
+ int priority)
+{
+ return SFX_PlayPatch(data, pitch, sep, vol, 0, 0);
+}
+
+void I_StopSound(int handle)
+{
+// extern volatile long gDmaCount;
+// long waittocount;
+ SFX_StopPatch(handle);
+// waittocount = gDmaCount + 2;
+// while (gDmaCount < waittocount) ;
+}
+
+int I_SoundIsPlaying(int handle)
+{
+ return SFX_Playing(handle);
+}
+
+void I_UpdateSoundParams(int handle, int vol, int sep, int pitch)
+{
+ SFX_SetOrigin(handle, pitch, sep, vol);
+}
+
+/*
+ *
+ * SOUND STARTUP STUFF
+ *
+ *
+ */
+
+//
+// Why PC's Suck, Reason #8712
+//
+
+void I_sndArbitrateCards(void)
+{
+ char tmp[160];
+ boolean gus, adlib, pc, sb, midi;
+ int i, rc, mputype, p, opltype, wait, dmxlump;
+
+ snd_MusicDevice = snd_DesiredMusicDevice;
+ snd_SfxDevice = snd_DesiredSfxDevice;
+
+ // check command-line parameters- overrides config file
+ //
+ if (M_CheckParm("-nosound"))
+ snd_MusicDevice = snd_SfxDevice = snd_none;
+ if (M_CheckParm("-nosfx"))
+ snd_SfxDevice = snd_none;
+ if (M_CheckParm("-nomusic"))
+ snd_MusicDevice = snd_none;
+
+ if (snd_MusicDevice > snd_MPU && snd_MusicDevice <= snd_MPU3)
+ snd_MusicDevice = snd_MPU;
+ if (snd_MusicDevice == snd_SB)
+ snd_MusicDevice = snd_Adlib;
+ if (snd_MusicDevice == snd_PAS)
+ snd_MusicDevice = snd_Adlib;
+
+ // figure out what i've got to initialize
+ //
+ gus = snd_MusicDevice == snd_GUS || snd_SfxDevice == snd_GUS;
+ sb = snd_SfxDevice == snd_SB || snd_MusicDevice == snd_SB;
+ adlib = snd_MusicDevice == snd_Adlib;
+ pc = snd_SfxDevice == snd_PC;
+ midi = snd_MusicDevice == snd_MPU;
+
+ // initialize whatever i've got
+ //
+ if (gus)
+ {
+ if (GF1_Detect())
+ ST_Message(" Dude. The GUS ain't responding.\n");
+ else
+ {
+ dmxlump = W_GetNumForName("dmxgus");
+ GF1_SetMap(W_CacheLumpNum(dmxlump, PU_CACHE),
+ lumpinfo[dmxlump].size);
+ }
+
+ }
+ if (sb)
+ {
+ if (debugmode)
+ {
+ ST_Message(" Sound cfg p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ }
+ if (SB_Detect(&snd_SBport, &snd_SBirq, &snd_SBdma, 0))
+ {
+ ST_Message(" SB isn't responding at p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ }
+ else
+ SB_SetCard(snd_SBport, snd_SBirq, snd_SBdma);
+
+ if (debugmode)
+ {
+ ST_Message(" SB_Detect returned p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ }
+ }
+
+ if (adlib)
+ {
+ if (AL_Detect(&wait, 0))
+ {
+ ST_Message(" Dude. The Adlib isn't responding.\n");
+ }
+ else
+ {
+ AL_SetCard(wait, W_CacheLumpName("genmidi", PU_STATIC));
+ }
+ }
+
+ if (midi)
+ {
+ if (debugmode)
+ {
+ ST_Message(" cfg p=0x%x\n", snd_Mport);
+ }
+
+ if (MPU_Detect(&snd_Mport, &i))
+ {
+ ST_Message(" The MPU-401 isn't reponding @ p=0x%x.\n",
+ snd_Mport);
+ }
+ else
+ MPU_SetCard(snd_Mport);
+ }
+
+}
+
+// inits all sound stuff
+
+void I_StartupSound(void)
+{
+ int rc, i;
+
+ if (debugmode)
+ ST_Message("I_StartupSound: Hope you hear a pop.\n");
+
+ // initialize dmxCodes[]
+ dmxCodes[0] = 0;
+ dmxCodes[snd_PC] = AHW_PC_SPEAKER;
+ dmxCodes[snd_Adlib] = AHW_ADLIB;
+ dmxCodes[snd_SB] = AHW_SOUND_BLASTER;
+ dmxCodes[snd_PAS] = AHW_MEDIA_VISION;
+ dmxCodes[snd_GUS] = AHW_ULTRA_SOUND;
+ dmxCodes[snd_MPU] = AHW_MPU_401;
+ dmxCodes[snd_MPU2] = AHW_MPU_401;
+ dmxCodes[snd_MPU3] = AHW_MPU_401;
+ dmxCodes[snd_AWE] = AHW_AWE32;
+ dmxCodes[snd_CDMUSIC] = 0;
+
+ // inits sound library timer stuff
+ I_StartupTimer();
+
+ // pick the sound cards i'm going to use
+ //
+ I_sndArbitrateCards();
+
+ if (debugmode)
+ {
+ ST_Message(" Music device #%d & dmxCode=%d,", snd_MusicDevice,
+ dmxCodes[snd_MusicDevice]);
+ ST_Message(" Sfx device #%d & dmxCode=%d\n", snd_SfxDevice,
+ dmxCodes[snd_SfxDevice]);
+ }
+
+ // inits DMX sound library
+ ST_Message(" Calling DMX_Init...");
+ rc = DMX_Init(SND_TICRATE, SND_MAXSONGS, dmxCodes[snd_MusicDevice],
+ dmxCodes[snd_SfxDevice]);
+
+ if (debugmode)
+ {
+ ST_Message(" DMX_Init() returned %d\n", rc);
+ }
+
+}
+
+// shuts down all sound stuff
+
+void I_ShutdownSound(void)
+{
+ DMX_DeInit();
+ I_ShutdownTimer();
+}
+
+void I_SetChannels(int channels)
+{
+ WAV_PlayMode(channels, SND_SAMPLERATE);
+}