diff options
Diffstat (limited to 'engine/audio/private/snd_mix_buf.h')
| -rw-r--r-- | engine/audio/private/snd_mix_buf.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/engine/audio/private/snd_mix_buf.h b/engine/audio/private/snd_mix_buf.h new file mode 100644 index 0000000..b51da6d --- /dev/null +++ b/engine/audio/private/snd_mix_buf.h @@ -0,0 +1,107 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef SND_MIX_BUF_H +#define SND_MIX_BUF_H + +#if defined( _WIN32 ) +#pragma once +#endif + +// OPTIMIZE: note that making this larger will not increase performance (12/27/03) +#define PAINTBUFFER_SIZE 1020 // 44k: was 512 + +#define PAINTBUFFER (g_curpaintbuffer) +#define REARPAINTBUFFER (g_currearpaintbuffer) +#define CENTERPAINTBUFFER (g_curcenterpaintbuffer) + +enum SoundBufferType_t +{ + SOUND_BUFFER_PAINT = 0, + SOUND_BUFFER_ROOM, + SOUND_BUFFER_FACING, + SOUND_BUFFER_FACINGAWAY, + SOUND_BUFFER_DRY, + SOUND_BUFFER_SPEAKER, + + SOUND_BUFFER_BASETOTAL, + SOUND_BUFFER_SPECIAL_START = SOUND_BUFFER_BASETOTAL +}; + +// !!! if this is changed, it much be changed in native assembly too !!! +struct portable_samplepair_t +{ + int left; + int right; +}; + +// sound mixing buffer +#define CPAINTFILTERMEM 3 +#define CPAINTFILTERS 4 // maximum number of consecutive upsample passes per paintbuffer + +struct paintbuffer_t +{ + bool factive; // if true, mix to this paintbuffer using flags + bool fsurround; // if true, mix to front and rear paintbuffers using flags + bool fsurround_center; // if true, mix to front, rear and center paintbuffers using flags + + int idsp_specialdsp; + int nPrevSpecialDSP; + int nSpecialDSP; + + int flags; // SOUND_BUSS_ROOM, SOUND_BUSS_FACING, SOUND_BUSS_FACINGAWAY, SOUND_BUSS_SPEAKER, SOUND_BUSS_SPECIAL_DSP, SOUND_BUSS_DRY + + portable_samplepair_t *pbuf; // front stereo mix buffer, for 2 or 4 channel mixing + portable_samplepair_t *pbufrear; // rear mix buffer, for 4 channel mixing + portable_samplepair_t *pbufcenter; // center mix buffer, for 5 channel mixing + + int ifilter; // current filter memory buffer to use for upsampling pass + + portable_samplepair_t fltmem[CPAINTFILTERS][CPAINTFILTERMEM]; // filter memory, for upsampling with linear or cubic interpolation + portable_samplepair_t fltmemrear[CPAINTFILTERS][CPAINTFILTERMEM]; // filter memory, for upsampling with linear or cubic interpolation + portable_samplepair_t fltmemcenter[CPAINTFILTERS][CPAINTFILTERMEM]; // filter memory, for upsampling with linear or cubic interpolation +}; + +extern "C" +{ + +extern portable_samplepair_t *g_paintbuffer; + +// temp paintbuffer - not included in main list of paintbuffers +extern portable_samplepair_t *g_temppaintbuffer; + +extern CUtlVector< paintbuffer_t > g_paintBuffers; + +extern void MIX_SetCurrentPaintbuffer( int ipaintbuffer ); +extern int MIX_GetCurrentPaintbufferIndex( void ); +extern paintbuffer_t *MIX_GetCurrentPaintbufferPtr( void ); +extern paintbuffer_t *MIX_GetPPaintFromIPaint( int ipaintbuffer ); +extern void MIX_ClearAllPaintBuffers( int SampleCount, bool clearFilters ); +extern bool MIX_InitAllPaintbuffers(void); +extern void MIX_FreeAllPaintbuffers(void); + +extern portable_samplepair_t *g_curpaintbuffer; +extern portable_samplepair_t *g_currearpaintbuffer; +extern portable_samplepair_t *g_curcenterpaintbuffer; + +}; + +// must be at least PAINTBUFFER_SIZE+1 for upsampling +#define PAINTBUFFER_MEM_SIZE (PAINTBUFFER_SIZE+4) + +// size in samples of copy buffer used by pitch shifters in mixing +#if defined(_GAMECONSOLE) +#define TEMP_COPY_BUFFER_SIZE (PAINTBUFFER_MEM_SIZE * 2) +#else +// allow more memory for this on PC for developers to pitch-shift their way through dialog +#define TEMP_COPY_BUFFER_SIZE (PAINTBUFFER_MEM_SIZE * 4) +#endif + +// hard clip input value to -32767 <= y <= 32767 +#define CLIP(x) ((x) > 32767 ? 32767 : ((x) < -32767 ? -32767 : (x))) + +#endif // SND_MIX_BUF_H |