diff options
Diffstat (limited to 'engine/audio/private/snd_wave_mixer_private.h')
| -rw-r--r-- | engine/audio/private/snd_wave_mixer_private.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/engine/audio/private/snd_wave_mixer_private.h b/engine/audio/private/snd_wave_mixer_private.h new file mode 100644 index 0000000..3aae40c --- /dev/null +++ b/engine/audio/private/snd_wave_mixer_private.h @@ -0,0 +1,74 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// +//----------------------------------------------------------------------------- +// $Log: $ +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef SND_WAVE_MIXER_PRIVATE_H +#define SND_WAVE_MIXER_PRIVATE_H +#pragma once + +#include "snd_audio_source.h" +#include "snd_wave_mixer.h" +#include "sound_private.h" +#include "snd_wave_source.h" + +class IWaveData; + +abstract_class CAudioMixerWave : public CAudioMixer +{ +public: + CAudioMixerWave( IWaveData *data ); + virtual ~CAudioMixerWave( void ); + + int MixDataToDevice( IAudioDevice *pDevice, channel_t *pChannel, int sampleCount, int outputRate, int outputOffset ); + int SkipSamples( channel_t *pChannel, int sampleCount, int outputRate, int outputOffset ); + bool ShouldContinueMixing( void ); + + virtual void Mix( IAudioDevice *pDevice, channel_t *pChannel, void *pData, int outputOffset, int inputOffset, fixedint fracRate, int outCount, int timecompress ) = 0; + virtual int GetOutputData( void **pData, int sampleCount, char copyBuf[AUDIOSOURCE_COPYBUF_SIZE] ); + + virtual CAudioSource* GetSource( void ); + virtual int GetSamplePosition( void ); + virtual float ModifyPitch( float pitch ); + virtual float GetVolumeScale( void ); + + // Move the current position to newPosition + virtual void SetSampleStart( int newPosition ); + + // End playback at newEndPosition + virtual void SetSampleEnd( int newEndPosition ); + + virtual void SetStartupDelaySamples( int delaySamples ); + + // private helper routines + + char * LoadMixBuffer( channel_t *pChannel, int sample_load_request, int *psamples_loaded, char copyBuf[AUDIOSOURCE_COPYBUF_SIZE] ); + int MixDataToDevice_( IAudioDevice *pDevice, channel_t *pChannel, int sampleCount, int outputRate, int outputOffset, bool bSkipAllSamples ); + int GetSampleLoadRequest( double rate, int sampleCount, bool bInterpolated_pitch ); + + virtual bool IsReadyToMix(); + virtual int GetPositionForSave() { return GetSamplePosition(); } + virtual void SetPositionFromSaved( int savedPosition ) { SetSampleStart(savedPosition); } + +protected: + double m_fsample_index; // index of next sample to output + int m_sample_max_loaded; // count of total samples loaded - ie: the index of + // the next sample to be loaded. + int m_sample_loaded_index; // index of last sample loaded + + IWaveData *m_pData; + double m_forcedEndSample; + bool m_finished; + int m_delaySamples; +}; + + +#endif // SND_WAVE_MIXER_PRIVATE_H |