//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: client sound i/o functions // //===========================================================================// #ifndef SOUND_H #define SOUND_H #ifdef _WIN32 #pragma once #endif #include "basetypes.h" #include "datamap.h" #include "mathlib/vector.h" #include "mathlib/mathlib.h" #include "tier1/strtools.h" #include "soundflags.h" #include "utlvector.h" #include "engine/SndInfo.h" #define MAX_SFX 2048 #define AUDIOSOURCE_CACHE_ROOTDIR "maps/soundcache" class CSfxTable; enum soundlevel_t; struct SoundInfo_t; struct AudioState_t; class IFileList; void S_Init (void); void S_Shutdown (void); bool S_IsInitted(); void S_StopAllSounds(bool clear); void S_Update( const AudioState_t *pAudioState ); void S_ExtraUpdate (void); void S_ClearBuffer (void); void S_BlockSound (void); void S_UnblockSound (void); float S_GetMasterVolume( void ); void S_SoundFade( float percent, float holdtime, float intime, float outtime ); void S_OnLoadScreen(bool value); void S_EnableThreadedMixing( bool bEnable ); void S_EnableMusic( bool bEnable ); struct StartSoundParams_t { StartSoundParams_t() : staticsound( false ), userdata( 0 ), soundsource( 0 ), entchannel( CHAN_AUTO ), pSfx( 0 ), bUpdatePositions( true ), fvol( 1.0f ), soundlevel( SNDLVL_NORM ), flags( SND_NOFLAGS ), pitch( PITCH_NORM ), specialdsp( 0 ), fromserver( false ), delay( 0.0f ), speakerentity( -1 ), suppressrecording( false ), initialStreamPosition( 0 ) { origin.Init(); direction.Init(); } bool staticsound; int userdata; int soundsource; int entchannel; CSfxTable *pSfx; Vector origin; Vector direction; bool bUpdatePositions; float fvol; soundlevel_t soundlevel; int flags; int pitch; int specialdsp; bool fromserver; float delay; int speakerentity; bool suppressrecording; int initialStreamPosition; }; int S_StartSound( StartSoundParams_t& params ); void S_StopSound ( int entnum, int entchannel ); enum clocksync_index_t { CLOCK_SYNC_CLIENT = 0, CLOCK_SYNC_SERVER, NUM_CLOCK_SYNCS }; extern float S_ComputeDelayForSoundtime( float soundtime, clocksync_index_t syncIndex ); void S_StopSoundByGuid( int guid ); float S_SoundDurationByGuid( int guid ); int S_GetGuidForLastSoundEmitted(); bool S_IsSoundStillPlaying( int guid ); void S_GetActiveSounds( CUtlVector< SndInfo_t >& sndlist ); void S_SetVolumeByGuid( int guid, float fvol ); float S_GetElapsedTimeByGuid( int guid ); bool S_IsLoopingSoundByGuid( int guid ); void S_ReloadSound( const char *pSample ); float S_GetMono16Samples( const char *pszName, CUtlVector< short >& sampleList ); CSfxTable *S_DummySfx( const char *name ); CSfxTable *S_PrecacheSound (const char *sample ); void S_PrefetchSound( char const *name, bool bPlayOnce ); void S_MarkUISound( CSfxTable *pSfx ); void S_ReloadFilesInList( IFileList *pFilesToReload ); vec_t S_GetNominalClipDist(); extern bool TestSoundChar(const char *pch, char c); extern char *PSkipSoundChars(const char *pch); #include "soundchars.h" // for recording movies void SND_MovieStart( void ); void SND_MovieEnd( void ); //------------------------------------- int S_GetCurrentStaticSounds( SoundInfo_t *pResult, int nSizeResult, int entchannel ); //----------------------------------------------------------------------------- float S_GetGainFromSoundLevel( soundlevel_t soundlevel, vec_t dist ); struct musicsave_t { DECLARE_SIMPLE_DATADESC(); char songname[ 128 ]; int sampleposition; short master_volume; }; void S_GetCurrentlyPlayingMusic( CUtlVector< musicsave_t >& list ); void S_RestartSong( const musicsave_t *song ); #endif // SOUND_H