/* *----------------------------------------------------------------------------- * * $Log: soundst.h,v $ * * Revision 2.0 1999/01/24 00:52:12 Andre Wertmann * changed to work with Heretic * * Revision 1.3 1997/01/29 22:40:45 b1 * Reformatting, S (sound) module files. * * Revision 1.2 1997/01/21 19:00:07 b1 * First formatting run: * using Emacs cc-mode.el indentation for C++ now. * * Revision 1.1 1997/01/19 17:22:50 b1 * Initial check in DOOM sources as of Jan. 10th, 1997 * * * DESCRIPTION: * Sound (utility) related. Hang on. * See gensounds.h and gensounds.c for what soundst.h is made of. * *----------------------------------------------------------------------------- */ #ifndef __SOUNDSTH__ #define __SOUNDSTH__ #include #define S_MAX_VOLUME 127 /* * when to clip out sounds * Doesn't fit the large outdoor areas. */ #define S_CLIPPING_DIST (1200*0x10000) /* when sounds should be max'd out */ #define S_CLOSE_DIST (200*0x10000) #define S_ATTENUATOR ((S_CLIPPING_DIST-S_CLOSE_DIST)>>FRACBITS) #define NORM_PITCH 128 #define NORM_PRIORITY 64 #define NORM_VOLUME snd_MaxVolume #define S_PITCH_PERTURB 1 #define NORM_SEP 128 #define S_STEREO_SWING (96*0x10000) /* % attenuation from front to back */ #define S_IFRACVOL 30 #define NA 0 #define S_NUMCHANNELS 2 /* * MusicInfo struct. */ typedef struct { /* up to 6-character name */ char* name; /* lump number of music */ int lumpnum; /* music data */ void* data; /* music handle once registered */ int handle; } musicinfo_t; /* * SoundFX struct. */ typedef struct sfxinfo_struct sfxinfo_t; struct sfxinfo_struct { /* up to 6-character name */ char* name; /* referenced sound if a link */ sfxinfo_t *link; /* Sfx priority */ int priority; /* sound data */ void *data; /* pitch if a link */ int pitch; /* volume if a link */ int volume; /* Sfx singularity (only one at a time) */ int singularity; /* * this is checked every second to see if sound * can be thrown out (if 0, then decrement, if -1, * then throw out, if > 0, then it is in use) */ int usefulness; /* lump number of sfx */ int lumpnum; /* total number of channels a sound type may occupy */ int numchannels; }; typedef struct { /* sound information (if null, channel avail.) */ sfxinfo_t* sfxinfo; /* origin of sound */ void* origin; /* handle of the sound being played */ int handle; } channel_t; enum { Music, Sfx, SfxLink }; enum { PC=1, Adlib=2, SB=4, Midi=8 }; /* cards available */ enum { sfxThrowOut=-1, sfxNotUsed=0 }; /* * Initialize the sound code at start of level */ void S_Start(void); /* * Start sound for thing at * using from sounds.h */ extern void S_StartSound( void* origin, int sfx_id ); /* Will start a sound at a given volume. */ extern void S_StartSoundAtVolume( void* origin_p, int sfx_id, int volume ); /* Stop sound for thing at */ extern void S_StopSound(void* origin); /* Start music using from sounds.h */ extern void S_StartMusic(int music_id); /* * Start music using from sounds.h, * and set whether looping */ extern void S_ChangeMusic( int music_id, int looping ); /* Stops the music */ extern void S_StopMusic(void); void S_PauseSound(void); void S_ResumeSound(void); /* * Updates music & sounds */ extern void S_UpdateSounds(void* listener); void S_SetMusicVolume(int volume); void S_SetSfxVolume(int volume); /* * Initializes sound stuff, including volume */ void S_Init( int, int ); /* * SOUND IO */ #define FREQ_LOW 0x40 #define FREQ_NORM 0x80 #define FREQ_HIGH 0xff void I_SetMusicVolume(int volume); void I_SetSfxVolume(int volume); /* * MUSIC I/O */ void I_PauseSong(int handle); void I_ResumeSong(int handle); /* * Called by anything that wishes to start music. * plays a song, and when the song is done, * starts playing it again in an endless loop. * Horrible thing to do, considering. */ void I_PlaySong( int handle, int looping ); /* stops a song over 3 seconds. */ void I_StopSong(int handle); /* registers a song handle to song data */ int I_RegisterSong(void *data); /* see above then think backwards */ void I_UnRegisterSong(int handle); /* is the song playing? */ int I_QrySongPlaying(int handle); /* * SFX I/O */ void I_SetChannels(int channels); int I_GetSfxLumpNum (sfxinfo_t*); /* Starts a sound in a particular sound channel. */ int I_StartSound( int id, void* data, int vol, int sep, int pitch, int priority ); /* * Updates the volume, separation, * and pitch of a sound channel. */ void I_UpdateSoundParams( int handle, int vol, int sep, int pitch ); /* Stops a sound channel. */ void I_StopSound(int handle); /* * Called by S_*()'s to see if a channel is still playing. * Returns 0 if no longer playing, 1 if playing. */ int I_SoundIsPlaying(int handle); /* the complete set of sound effects */ extern sfxinfo_t S_sfx[]; /* the complete set of music */ extern musicinfo_t S_music[]; #endif