diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/soundsystem/snd_device.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/soundsystem/snd_device.h')
| -rw-r--r-- | mp/src/public/soundsystem/snd_device.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/mp/src/public/soundsystem/snd_device.h b/mp/src/public/soundsystem/snd_device.h new file mode 100644 index 00000000..7c5da313 --- /dev/null +++ b/mp/src/public/soundsystem/snd_device.h @@ -0,0 +1,110 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $Workfile: $
+// $Date: $
+// $NoKeywords: $
+//===========================================================================//
+
+#ifndef SND_DEVICE_H
+#define SND_DEVICE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier0/platform.h"
+
+//-----------------------------------------------------------------------------
+// 4.28 fixed point stuff for real-time resampling
+//-----------------------------------------------------------------------------
+#define FIX_BITS 28
+#define FIX_SCALE (1 << FIX_BITS)
+#define FIX_MASK ((1 << FIX_BITS)-1)
+#define FIX_FLOAT(a) ((int)((a) * FIX_SCALE))
+#define FIX(a) (((int)(a)) << FIX_BITS)
+#define FIX_INTPART(a) (((int)(a)) >> FIX_BITS)
+#define FIX_FRACTION(a,b) (FIX(a)/(b))
+#define FIX_FRACPART(a) ((a) & FIX_MASK)
+
+typedef unsigned int fixedint;
+
+
+//-----------------------------------------------------------------------------
+// sound rate defines
+//-----------------------------------------------------------------------------
+#define SOUND_DMA_SPEED 44100 // hardware playback rate
+#define SOUND_11k 11025 // 11khz sample rate
+#define SOUND_22k 22050 // 22khz sample rate
+#define SOUND_44k 44100 // 44khz sample rate
+#define SOUND_ALL_RATES 1 // mix all sample rates
+
+
+//-----------------------------------------------------------------------------
+// Information about the channel
+//-----------------------------------------------------------------------------
+struct channel_t
+{
+ int leftvol;
+ int rightvol;
+ float pitch;
+};
+
+
+//-----------------------------------------------------------------------------
+// The audio device is responsible for mixing
+//-----------------------------------------------------------------------------
+abstract_class IAudioDevice
+{
+public:
+ // Add a virtual destructor to silence the clang warning.
+ // This is harmless but not important since the only derived class
+ // doesn't have a destructor.
+ virtual ~IAudioDevice() {}
+
+ // This initializes the sound hardware. true on success, false on failure
+ virtual bool Init( void ) = 0;
+
+ // This releases all sound hardware
+ virtual void Shutdown( void ) = 0;
+
+ // device parameters
+ virtual const char *DeviceName( void ) const = 0;
+ virtual int DeviceChannels( void ) const = 0; // 1 = mono, 2 = stereo
+ virtual int DeviceSampleBits( void ) const = 0; // bits per sample (8 or 16)
+ virtual int DeviceSampleBytes( void ) const = 0; // above / 8
+ virtual int DeviceSampleRate( void ) const = 0; // Actual DMA speed
+ virtual int DeviceSampleCount( void ) const = 0; // Total samples in buffer
+
+ // Called each time a new paint buffer is mixed (may be multiple times per frame)
+ virtual void MixBegin( void ) = 0;
+
+ // Main mixing routines
+ virtual void Mix8Mono( channel_t *pChannel, char *pData, int outputOffset, int inputOffset, fixedint rateScaleFix, int outCount, int timecompress, bool forward = true ) = 0;
+ virtual void Mix8Stereo( channel_t *pChannel, char *pData, int outputOffset, int inputOffset, fixedint rateScaleFix, int outCount, int timecompress, bool forward = true ) = 0;
+ virtual void Mix16Mono( channel_t *pChannel, short *pData, int outputOffset, int inputOffset, fixedint rateScaleFix, int outCount, int timecompress, bool forward = true ) = 0;
+ virtual void Mix16Stereo( channel_t *pChannel, short *pData, int outputOffset, int inputOffset, fixedint rateScaleFix, int outCount, int timecompress, bool forward = true ) = 0;
+
+ // Size of the paint buffer in samples
+ virtual int PaintBufferSampleCount( void ) const = 0;
+
+ // Adds a mixer to be mixed
+ virtual void AddSource( CAudioMixer *pSource ) = 0;
+
+ // Stops all sounds
+ virtual void StopSounds( void ) = 0;
+
+ // Updates sound mixing
+ virtual void Update( float time ) = 0;
+
+ // Resets the device
+ virtual void Flush( void ) = 0;
+
+ virtual int FindSourceIndex( CAudioMixer *pSource ) = 0;
+ virtual CAudioMixer *GetMixerForSource( CAudioSource *source ) = 0;
+ virtual void FreeChannel( int channelIndex ) = 0;
+};
+
+
+#endif // SND_DEVICE_H
|