2014-03-15 16:59:03 +00:00
|
|
|
// SONIC ROBO BLAST 2
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
|
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
2016-05-18 00:42:11 +00:00
|
|
|
// Copyright (C) 1999-2016 by Sonic Team Junior.
|
2014-03-15 16:59:03 +00:00
|
|
|
//
|
|
|
|
// This program is free software distributed under the
|
|
|
|
// terms of the GNU General Public License, version 2.
|
|
|
|
// See the 'LICENSE' file for more details.
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
/// \file i_sound.h
|
|
|
|
/// \brief System interface, sound, music and CD
|
|
|
|
|
|
|
|
#ifndef __I_SOUND__
|
|
|
|
#define __I_SOUND__
|
|
|
|
|
|
|
|
#include "doomdef.h"
|
|
|
|
#include "sounds.h"
|
|
|
|
#include "command.h"
|
|
|
|
|
2018-08-18 21:17:53 +00:00
|
|
|
// copied from SDL mixer, plus GME
|
|
|
|
typedef enum {
|
|
|
|
MU_NONE,
|
|
|
|
MU_CMD,
|
|
|
|
MU_WAV,
|
|
|
|
MU_MOD,
|
|
|
|
MU_MID,
|
|
|
|
MU_OGG,
|
|
|
|
MU_MP3,
|
|
|
|
MU_MP3_MAD_UNUSED, // use MU_MP3 instead
|
|
|
|
MU_FLAC,
|
|
|
|
MU_MODPLUG_UNUSED, // use MU_MOD instead
|
|
|
|
MU_GME
|
|
|
|
} musictype_t;
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
/** \brief Sound subsystem runing and waiting
|
|
|
|
*/
|
|
|
|
extern UINT8 sound_started;
|
|
|
|
|
|
|
|
/** \brief info of samplerate
|
|
|
|
*/
|
|
|
|
extern consvar_t cv_samplerate;
|
|
|
|
//extern consvar_t cv_rndsoundpitch;
|
|
|
|
|
|
|
|
/** \brief The I_GetSfx function
|
|
|
|
|
|
|
|
\param sfx sfx to setup
|
|
|
|
|
|
|
|
\return data for sfx
|
|
|
|
*/
|
|
|
|
void *I_GetSfx(sfxinfo_t *sfx);
|
|
|
|
|
|
|
|
/** \brief The I_FreeSfx function
|
|
|
|
|
|
|
|
\param sfx sfx to be freed up
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_FreeSfx(sfxinfo_t *sfx);
|
|
|
|
|
|
|
|
/** \brief Init at program start...
|
|
|
|
*/
|
|
|
|
void I_StartupSound(void);
|
|
|
|
|
|
|
|
/** \brief ... shut down and relase at program termination.
|
|
|
|
*/
|
|
|
|
void I_ShutdownSound(void);
|
|
|
|
|
|
|
|
//
|
|
|
|
// SFX I/O
|
|
|
|
//
|
|
|
|
|
|
|
|
/** \brief Starts a sound in a particular sound channel.
|
|
|
|
\param id sfxid
|
|
|
|
\param vol volume for sound
|
|
|
|
\param sep left-right balancle
|
|
|
|
\param pitch not used
|
|
|
|
\param priority not used
|
|
|
|
|
|
|
|
\return sfx handle
|
|
|
|
*/
|
|
|
|
INT32 I_StartSound(sfxenum_t id, UINT8 vol, UINT8 sep, UINT8 pitch, UINT8 priority);
|
|
|
|
|
|
|
|
/** \brief Stops a sound channel.
|
|
|
|
|
|
|
|
\param handle stop sfx handle
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_StopSound(INT32 handle);
|
|
|
|
|
|
|
|
/** \brief Some digital sound drivers need this.
|
|
|
|
*/
|
|
|
|
void I_UpdateSound(void);
|
|
|
|
|
|
|
|
/** \brief Called by S_*() functions to see if a channel is still playing.
|
|
|
|
|
|
|
|
\param handle sfx handle
|
|
|
|
|
|
|
|
\return 0 if no longer playing, 1 if playing.
|
|
|
|
*/
|
|
|
|
boolean I_SoundIsPlaying(INT32 handle);
|
|
|
|
|
|
|
|
/** \brief Updates the sfx handle
|
|
|
|
|
|
|
|
\param handle sfx handle
|
|
|
|
\param vol volume
|
|
|
|
\param sep separation
|
|
|
|
\param pitch ptich
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_UpdateSoundParams(INT32 handle, UINT8 vol, UINT8 sep, UINT8 pitch);
|
|
|
|
|
|
|
|
/** \brief The I_SetSfxVolume function
|
|
|
|
|
|
|
|
\param volume volume to set at
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_SetSfxVolume(UINT8 volume);
|
|
|
|
|
|
|
|
//
|
|
|
|
// MUSIC I/O
|
|
|
|
//
|
|
|
|
/** \brief Init the music systems
|
|
|
|
*/
|
|
|
|
void I_InitMusic(void);
|
|
|
|
|
|
|
|
/** \brief Shutdown the music systems
|
|
|
|
*/
|
|
|
|
void I_ShutdownMusic(void);
|
|
|
|
|
|
|
|
/** \brief PAUSE game handling.
|
|
|
|
|
|
|
|
\param handle song handle
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_PauseSong(INT32 handle);
|
|
|
|
|
|
|
|
/** \brief RESUME game handling
|
|
|
|
|
|
|
|
\param handle song handle
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_ResumeSong(INT32 handle);
|
|
|
|
|
2018-08-15 05:43:16 +00:00
|
|
|
/** \brief Get general music status
|
|
|
|
|
|
|
|
\return boolean
|
|
|
|
*/
|
|
|
|
boolean I_MusicPlaying(void);
|
|
|
|
|
2018-08-15 05:55:03 +00:00
|
|
|
/** \brief Get music pause status
|
|
|
|
|
|
|
|
\return boolean
|
|
|
|
*/
|
|
|
|
boolean I_MusicPaused(void);
|
|
|
|
|
2018-08-18 21:17:53 +00:00
|
|
|
musictype_t I_MusicType(void);
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
//
|
|
|
|
// MIDI I/O
|
|
|
|
//
|
|
|
|
|
|
|
|
/** \brief Startup the MIDI music system
|
|
|
|
*/
|
|
|
|
void I_InitMIDIMusic(void);
|
|
|
|
|
|
|
|
/** \brief Shutdown the MIDI music system
|
|
|
|
*/
|
|
|
|
void I_ShutdownMIDIMusic(void);
|
|
|
|
|
|
|
|
/** \brief The I_SetMIDIMusicVolume function
|
|
|
|
|
|
|
|
\param volume volume to set at
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_SetMIDIMusicVolume(UINT8 volume);
|
|
|
|
|
|
|
|
/** \brief Registers a song handle to song data.
|
|
|
|
|
|
|
|
\param data pointer to song data
|
|
|
|
\param len len of data
|
|
|
|
|
|
|
|
\return song handle
|
|
|
|
|
|
|
|
\todo Remove this
|
|
|
|
*/
|
|
|
|
INT32 I_RegisterSong(void *data, size_t len);
|
|
|
|
|
|
|
|
/** \brief Called by anything that wishes to start music
|
|
|
|
|
|
|
|
\param handle Song handle
|
|
|
|
\param looping looping it if true
|
|
|
|
|
|
|
|
\return if true, it's playing the song
|
|
|
|
|
|
|
|
\todo pass music name, not handle
|
|
|
|
*/
|
|
|
|
boolean I_PlaySong(INT32 handle, boolean looping);
|
|
|
|
|
|
|
|
/** \brief Stops a song over 3 seconds
|
|
|
|
|
|
|
|
\param handle Song handle
|
|
|
|
\return void
|
|
|
|
|
|
|
|
/todo drop handle
|
|
|
|
*/
|
|
|
|
void I_StopSong(INT32 handle);
|
|
|
|
|
|
|
|
/** \brief See ::I_RegisterSong, then think backwards
|
|
|
|
|
|
|
|
\param handle song handle
|
|
|
|
|
|
|
|
\sa I_RegisterSong
|
|
|
|
\todo remove midi handle
|
|
|
|
*/
|
|
|
|
void I_UnRegisterSong(INT32 handle);
|
|
|
|
|
|
|
|
//
|
|
|
|
// DIGMUSIC I/O
|
|
|
|
//
|
|
|
|
|
|
|
|
/** \brief Startup the music system
|
|
|
|
*/
|
|
|
|
void I_InitDigMusic(void);
|
|
|
|
|
|
|
|
/** \brief Shutdown the music system
|
|
|
|
*/
|
|
|
|
void I_ShutdownDigMusic(void);
|
|
|
|
|
|
|
|
boolean I_SetSongSpeed(float speed);
|
|
|
|
|
2018-08-18 18:18:29 +00:00
|
|
|
UINT32 I_GetMusicLength(void);
|
|
|
|
|
2018-08-19 00:19:44 +00:00
|
|
|
boolean I_SetMusicLoopPoint(UINT32 looppoint);
|
|
|
|
|
|
|
|
UINT32 I_GetMusicLoopPoint(void);
|
|
|
|
|
2018-08-15 06:10:46 +00:00
|
|
|
boolean I_SetMusicPosition(UINT32 position);
|
2018-08-15 05:38:06 +00:00
|
|
|
|
2018-08-15 06:10:46 +00:00
|
|
|
UINT32 I_GetMusicPosition(void);
|
2018-08-15 05:38:06 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
boolean I_SetSongTrack(INT32 track);
|
|
|
|
|
2018-08-19 13:38:57 +00:00
|
|
|
void I_SetInternalMusicVolume(UINT8 volume);
|
|
|
|
|
2018-08-19 20:19:48 +00:00
|
|
|
void I_StopFadingMusic(void);
|
|
|
|
|
2018-08-19 21:02:13 +00:00
|
|
|
boolean I_FadeMusicFromLevel(UINT8 target_volume, UINT16 source_volume, UINT32 ms);
|
2018-08-19 20:19:48 +00:00
|
|
|
|
2018-08-19 21:02:13 +00:00
|
|
|
boolean I_FadeMusic(UINT8 target_volume, UINT32 ms);
|
2018-08-19 20:19:48 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
/** \brief The I_StartDigSong function
|
|
|
|
|
|
|
|
\param musicname music lump name
|
|
|
|
\param looping if true, loop the song
|
|
|
|
|
|
|
|
\return if true, song playing
|
|
|
|
*/
|
|
|
|
boolean I_StartDigSong(const char *musicname, boolean looping);
|
|
|
|
|
|
|
|
/** \brief stop non-MIDI song
|
|
|
|
*/
|
|
|
|
void I_StopDigSong(void);
|
|
|
|
|
|
|
|
/** \brief The I_SetDigMusicVolume function
|
|
|
|
|
|
|
|
\param volume volume to set at
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_SetDigMusicVolume(UINT8 volume);
|
|
|
|
|
|
|
|
//
|
|
|
|
// CD MUSIC I/O
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
/** \brief cd music interface
|
|
|
|
*/
|
|
|
|
extern UINT8 cdaudio_started;
|
|
|
|
|
|
|
|
/** \brief Startup the CD system
|
|
|
|
*/
|
|
|
|
void I_InitCD(void);
|
|
|
|
|
|
|
|
/** \brief Stop the CD playback
|
|
|
|
*/
|
|
|
|
void I_StopCD(void);
|
|
|
|
|
|
|
|
/** \brief Pause the CD playback
|
|
|
|
*/
|
|
|
|
void I_PauseCD(void);
|
|
|
|
|
|
|
|
/** \brief Resume the CD playback
|
|
|
|
*/
|
|
|
|
void I_ResumeCD(void);
|
|
|
|
|
|
|
|
/** \brief Shutdown the CD system
|
|
|
|
*/
|
|
|
|
void I_ShutdownCD(void);
|
|
|
|
|
|
|
|
/** \brief Update the CD info
|
|
|
|
*/
|
|
|
|
void I_UpdateCD(void);
|
|
|
|
|
|
|
|
/** \brief The I_PlayCD function
|
|
|
|
|
|
|
|
\param track CD track number
|
|
|
|
\param looping if true, loop the track
|
|
|
|
|
|
|
|
\return void
|
|
|
|
*/
|
|
|
|
void I_PlayCD(UINT8 track, UINT8 looping);
|
|
|
|
|
|
|
|
/** \brief The I_SetVolumeCD function
|
|
|
|
|
|
|
|
\param volume volume level to set at
|
|
|
|
|
|
|
|
\return return 0 on failure
|
|
|
|
*/
|
|
|
|
boolean I_SetVolumeCD(INT32 volume);
|
|
|
|
|
|
|
|
#endif
|