source-engine/public/engine/audio/sound.h

151 lines
3.7 KiB
C++

//========= 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