initial
This commit is contained in:
332
engine/audio/public/sound.h
Normal file
332
engine/audio/public/sound.h
Normal file
@@ -0,0 +1,332 @@
|
||||
//===== Copyright 1996-2005, 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"
|
||||
#include "cdll_int.h"
|
||||
#include "SoundEmitterSystem/isoundemittersystembase.h"
|
||||
|
||||
DECLARE_LOGGING_CHANNEL( LOG_SOUND_OPERATOR_SYSTEM );
|
||||
|
||||
#define MAX_SFX 2048
|
||||
|
||||
#define AUDIOSOURCE_CACHE_ROOTDIR "maps/soundcache"
|
||||
|
||||
class CSfxTable;
|
||||
enum soundlevel_t;
|
||||
struct SoundInfo_t;
|
||||
struct AudioState_t;
|
||||
struct channel_t;
|
||||
class IFileList;
|
||||
|
||||
void S_Init (void);
|
||||
void S_Shutdown (void);
|
||||
bool S_IsInitted();
|
||||
|
||||
void S_StopAllSounds(bool clear);
|
||||
bool S_GetPreventSound( void );
|
||||
|
||||
#if !USE_AUDIO_DEVICE_V1
|
||||
struct audio_device_description_t;
|
||||
void S_GetAudioDeviceList( CUtlVector<audio_device_description_t> &audioList );
|
||||
#endif
|
||||
|
||||
class CAudioState
|
||||
{
|
||||
public:
|
||||
CAudioState() {}
|
||||
|
||||
bool IsAnyPlayerUnderwater() const;
|
||||
|
||||
AudioState_t &GetPerUser( int nSlot = -1 );
|
||||
const AudioState_t &GetPerUser( int nSlot = -1 ) const;
|
||||
private:
|
||||
|
||||
AudioState_t m_PerUser[ MAX_SPLITSCREEN_CLIENTS ];
|
||||
};
|
||||
|
||||
void S_Update( const CAudioState *pAudioState );
|
||||
void S_ExtraUpdate (void);
|
||||
void S_ClearBuffer (void);
|
||||
void S_BlockSound (void);
|
||||
void S_UnblockSound (void);
|
||||
void S_UpdateWindowFocus( bool bWindowHasFocus );
|
||||
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 );
|
||||
|
||||
void S_PreventSound(bool bSetting);
|
||||
|
||||
struct StartSoundParams_t
|
||||
{
|
||||
StartSoundParams_t() :
|
||||
m_nSoundScriptHash( SOUNDEMITTER_INVALID_HASH ),
|
||||
m_pSoundEntryName( NULL ),
|
||||
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 ),
|
||||
fromserver( false ),
|
||||
delay( 0.0f ),
|
||||
speakerentity( -1 ),
|
||||
bToolSound( false ),
|
||||
initialStreamPosition( 0 ),
|
||||
skipInitialSamples( 0 ),
|
||||
m_nQueuedGUID( UNINT_GUID ),
|
||||
m_bIsScriptHandle( false ),
|
||||
m_pOperatorsKV( NULL ),
|
||||
opStackElapsedTime( 0.0f ),
|
||||
opStackElapsedStopTime( 0.0f ),
|
||||
m_bDelayedStart( false ),
|
||||
m_bInEyeSound( false ),
|
||||
m_bHRTFFollowEntity( false ),
|
||||
m_bHRTFBilinear( false ),
|
||||
m_bHRTFLock( false )
|
||||
{
|
||||
origin.Init();
|
||||
direction.Init();
|
||||
}
|
||||
void Copy( StartSoundParams_t &destParams )
|
||||
{
|
||||
destParams.userdata = userdata;
|
||||
destParams.soundsource = soundsource;
|
||||
destParams.entchannel = entchannel;
|
||||
destParams.pSfx = pSfx;
|
||||
VectorCopy( origin, destParams.origin );
|
||||
VectorCopy( direction, destParams.direction );
|
||||
destParams.fvol = fvol;
|
||||
destParams.soundlevel = soundlevel;
|
||||
destParams.flags = flags;
|
||||
destParams.pitch = pitch;
|
||||
destParams.delay = delay;
|
||||
destParams.speakerentity = speakerentity;
|
||||
destParams.initialStreamPosition = initialStreamPosition;
|
||||
destParams.skipInitialSamples = skipInitialSamples;
|
||||
destParams.m_nQueuedGUID = m_nQueuedGUID;
|
||||
destParams.m_nSoundScriptHash = m_nSoundScriptHash;
|
||||
destParams.m_pSoundEntryName = m_pSoundEntryName;
|
||||
destParams.m_pOperatorsKV = m_pOperatorsKV;
|
||||
destParams.opStackElapsedTime = opStackElapsedTime;
|
||||
destParams.opStackElapsedStopTime = opStackElapsedStopTime;
|
||||
destParams.staticsound = staticsound;
|
||||
destParams.bUpdatePositions = bUpdatePositions;
|
||||
destParams.fromserver = fromserver;
|
||||
destParams.bToolSound = bToolSound;
|
||||
destParams.m_bIsScriptHandle = m_bIsScriptHandle;
|
||||
destParams.m_bDelayedStart = m_bDelayedStart;
|
||||
destParams.m_bInEyeSound = m_bInEyeSound;
|
||||
destParams.m_bHRTFFollowEntity = m_bHRTFFollowEntity;
|
||||
destParams.m_bHRTFBilinear = m_bHRTFBilinear;
|
||||
destParams.m_bHRTFLock = m_bHRTFLock;
|
||||
}
|
||||
void CopyNewFromParams( StartSoundParams_t &destParams )
|
||||
{
|
||||
destParams.userdata = userdata;
|
||||
// destParams.soundsource = soundsource;
|
||||
// destParams.entchannel = entchannel;
|
||||
destParams.pSfx = pSfx;
|
||||
VectorCopy( origin, destParams.origin );
|
||||
VectorCopy( direction,destParams.direction );
|
||||
destParams.fvol = fvol;
|
||||
destParams.soundlevel = soundlevel;
|
||||
destParams.flags = flags;
|
||||
destParams.pitch = pitch;
|
||||
destParams.delay = delay;
|
||||
destParams.speakerentity = speakerentity;
|
||||
// destParams.initialStreamPosition = initialStreamPosition;
|
||||
// destParams.skipInitialSamples = skipInitialSamples;
|
||||
// destParams.m_nQueuedGUID = m_nQueuedGUID;
|
||||
// destParams.m_nSoundScriptHash = m_nSoundScriptHash;
|
||||
// destParams.m_pSoundEntryName = m_pSoundEntryName;
|
||||
// destParams.m_pOperatorsKV = m_pOperatorsKV;
|
||||
// destParams.opStackElapsedTime = opStackElapsedTime;
|
||||
// destParams.opStackElapsedStopTime = opStackElapsedStopTime;
|
||||
destParams.staticsound = staticsound;
|
||||
destParams.bUpdatePositions = bUpdatePositions;
|
||||
destParams.fromserver = fromserver;
|
||||
destParams.bToolSound = bToolSound;
|
||||
destParams.m_bIsScriptHandle =m_bIsScriptHandle;
|
||||
destParams.m_bInEyeSound = m_bInEyeSound;
|
||||
destParams.m_bHRTFFollowEntity = m_bHRTFFollowEntity;
|
||||
destParams.m_bHRTFBilinear = m_bHRTFBilinear;
|
||||
destParams.m_bHRTFLock = m_bHRTFLock;
|
||||
|
||||
/* destParams.m_bDelayedStart = m_bDelayedStart;*/
|
||||
}
|
||||
int userdata;
|
||||
int soundsource;
|
||||
int entchannel;
|
||||
CSfxTable *pSfx;
|
||||
Vector origin;
|
||||
Vector direction;
|
||||
float fvol;
|
||||
soundlevel_t soundlevel;
|
||||
int flags;
|
||||
int pitch;
|
||||
float delay;
|
||||
int speakerentity;
|
||||
int initialStreamPosition;
|
||||
int skipInitialSamples;
|
||||
int m_nQueuedGUID;
|
||||
HSOUNDSCRIPTHASH m_nSoundScriptHash;
|
||||
const char *m_pSoundEntryName;
|
||||
KeyValues *m_pOperatorsKV;
|
||||
float opStackElapsedTime;
|
||||
float opStackElapsedStopTime;
|
||||
|
||||
bool staticsound : 1;
|
||||
bool bUpdatePositions : 1;
|
||||
bool fromserver : 1;
|
||||
bool bToolSound : 1;
|
||||
bool m_bIsScriptHandle : 1;
|
||||
bool m_bDelayedStart : 1;
|
||||
bool m_bInEyeSound : 1;
|
||||
bool m_bHRTFFollowEntity : 1;
|
||||
bool m_bHRTFBilinear : 1;
|
||||
bool m_bHRTFLock : 1;
|
||||
|
||||
static const int UNINT_GUID = -1;
|
||||
static const int GENERATE_GUID = -2; // Generate GUID regardless of the other vol and pitch flags.
|
||||
};
|
||||
|
||||
int S_StartSoundEntry( StartSoundParams_t &pStartParams, int nSeed, bool bFromQueue = false );
|
||||
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, bool bForceSync = false );
|
||||
float S_SoundDuration( channel_t * pChannel );
|
||||
float S_SoundDurationByGuid( int guid );
|
||||
int S_GetGuidForLastSoundEmitted();
|
||||
bool S_IsSoundStillPlaying( int guid );
|
||||
bool S_GetSoundChannelVolume( const char* sound, float &flVolumeLeft, float &flVolumeRight );
|
||||
void S_GetActiveSounds( CUtlVector< SndInfo_t >& sndlist );
|
||||
void S_SetVolumeByGuid( int guid, float fvol );
|
||||
float S_GetElapsedTime( const channel_t * pChannel );
|
||||
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 );
|
||||
|
||||
struct channelsave
|
||||
{
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
|
||||
char soundName[64];
|
||||
Vector origin;
|
||||
soundlevel_t soundLevel;
|
||||
int soundSource;
|
||||
int entChannel;
|
||||
int pitch;
|
||||
float opStackElapsedTime;
|
||||
float opStackElapsedStopTime;
|
||||
short masterVolume;
|
||||
};
|
||||
|
||||
typedef CUtlVector< channelsave > ChannelSaveVector;
|
||||
|
||||
void S_GetActiveSaveRestoreChannels( ChannelSaveVector& channelSaves );
|
||||
void S_RestartChannel( channelsave const& channelSave );
|
||||
|
||||
|
||||
bool S_DSPGetCurrentDASRoomNew(void);
|
||||
bool S_DSPGetCurrentDASRoomChanged(void);
|
||||
bool S_DSPGetCurrentDASRoomSkyAbove(void);
|
||||
float S_DSPGetCurrentDASRoomSkyPercent(void);
|
||||
|
||||
enum setmixer_t
|
||||
{
|
||||
MIXER_SET = 0,
|
||||
MIXER_MULT
|
||||
};
|
||||
|
||||
void S_SetMixGroupOfCurrentMixer( const char *szgroupname, const char *szparam, float val, int setMixerType );
|
||||
int S_GetMixGroupIndex( const char *pMixGroupName );
|
||||
int S_GetMixLayerIndex(const char *szmixlayername);
|
||||
void S_SetMixLayerLevel(int index, float level);
|
||||
void S_SetMixLayerTriggerFactor( const char *pMixLayerName, const char *pMixGroupName, float flFactor );
|
||||
void S_SetMixLayerTriggerFactor( int nMixLayerIndex, int nMixGroupIndex, float flFactor );
|
||||
|
||||
// global pitch scale
|
||||
void S_SoundSetPitchScale( float flPitchScale );
|
||||
float S_SoundGetPitchScale( void );
|
||||
|
||||
bool S_SOSSetOpvarFloat( const char *pOpVarName, float flValue );
|
||||
bool S_SOSGetOpvarFloat( const char *pOpVarName, float &flValue );
|
||||
|
||||
void S_ValidateSoundCache( char const *pchWavFile );
|
||||
|
||||
#if defined( _GAMECONSOLE )
|
||||
void S_UnloadSound( const char *pName );
|
||||
#endif
|
||||
|
||||
void S_PurgeSoundsDueToLanguageChange();
|
||||
|
||||
#endif // SOUND_H
|
||||
Reference in New Issue
Block a user