summaryrefslogtreecommitdiff
path: root/engine/audio/private/snd_wave_mixer_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'engine/audio/private/snd_wave_mixer_private.h')
-rw-r--r--engine/audio/private/snd_wave_mixer_private.h74
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