initial
This commit is contained in:
127
utils/hlfaceposer/audiowaveoutput.h
Normal file
127
utils/hlfaceposer/audiowaveoutput.h
Normal file
@@ -0,0 +1,127 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef AUDIOWAVEOUTPUT_H
|
||||
#define AUDIOWAVEOUTPUT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "sound.h"
|
||||
#include "UtlVector.h"
|
||||
|
||||
#define OUTPUT_BUFFER_COUNT 32
|
||||
#define MAX_CHANNELS 16
|
||||
|
||||
class CAudioMixer;
|
||||
|
||||
class CAudioMixerState
|
||||
{
|
||||
public:
|
||||
CAudioMixer *mixer;
|
||||
int submit_mixer_sample;
|
||||
};
|
||||
|
||||
class CAudioBuffer
|
||||
{
|
||||
public:
|
||||
WAVEHDR *hdr;
|
||||
bool submitted;
|
||||
int submit_sample_count;
|
||||
|
||||
CUtlVector< CAudioMixerState > m_Referenced;
|
||||
};
|
||||
|
||||
#define OUTPUT_SAMPLE_RATE 44100
|
||||
#define PAINTBUFFER_SIZE 1024
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int left;
|
||||
int right;
|
||||
} portable_samplepair_t;
|
||||
|
||||
class CAudioDeviceSWMix : public IAudioDevice
|
||||
{
|
||||
public:
|
||||
virtual void Mix8Mono( channel_t *pChannel, char *pData, int outputOffset, int inputOffset, int rateScaleFix, int outCount, int timecompress, bool forward = true );
|
||||
virtual void Mix8Stereo( channel_t *pChannel, char *pData, int outputOffset, int inputOffset, int rateScaleFix, int outCount, int timecompress, bool forward = true );
|
||||
virtual void Mix16Mono( channel_t *pChannel, short *pData, int outputOffset, int inputOffset, int rateScaleFix, int outCount, int timecompress, bool forward = true );
|
||||
virtual void Mix16Stereo( channel_t *pChannel, short *pData, int outputOffset, int inputOffset, int rateScaleFix, int outCount, int timecompress, bool forward = true );
|
||||
virtual int MaxSampleCount( void );
|
||||
virtual void MixBegin( void );
|
||||
|
||||
void TransferBufferStereo16( short *pOutput, int sampleCount );
|
||||
|
||||
private:
|
||||
portable_samplepair_t m_paintbuffer[ PAINTBUFFER_SIZE ];
|
||||
};
|
||||
|
||||
class CAudioWaveOutput : public CAudioOutput
|
||||
{
|
||||
public:
|
||||
CAudioWaveOutput( void );
|
||||
~CAudioWaveOutput( void );
|
||||
|
||||
// returns the size of each sample in bytes
|
||||
virtual int SampleSize( void ) { return 2; }
|
||||
|
||||
// returns the sampling rate of the data
|
||||
virtual int SampleRate( void ) { return OUTPUT_SAMPLE_RATE; }
|
||||
|
||||
// returns the mono/stereo status of this device (true if stereo)
|
||||
virtual bool IsStereo( void ) { return true; }
|
||||
|
||||
// mix a buffer up to time (time is absolute)
|
||||
virtual void Update( float time );
|
||||
|
||||
virtual void Flush( void );
|
||||
|
||||
virtual void AddSource( CAudioMixer *pSource );
|
||||
virtual void StopSounds( void );
|
||||
virtual int FindSourceIndex( CAudioMixer *pSource );
|
||||
|
||||
virtual int GetOutputPosition( void );
|
||||
virtual float GetAmountofTimeAhead( void );
|
||||
virtual int GetNumberofSamplesAhead( void );
|
||||
|
||||
virtual CAudioMixer *GetMixerForSource( CAudioSource *pSource );
|
||||
|
||||
|
||||
private:
|
||||
void OpenDevice( void );
|
||||
bool ValidDevice( void ) { return m_deviceHandle != 0; }
|
||||
void ClearDevice( void ) { m_deviceHandle = NULL; }
|
||||
CAudioBuffer *GetEmptyBuffer( void );
|
||||
void SilenceBuffer( short *pSamples, int sampleCount );
|
||||
|
||||
void SetChannel( int channelIndex, CAudioMixer *pSource );
|
||||
void FreeChannel( int channelIndex );
|
||||
|
||||
void RemoveMixerChannelReferences( CAudioMixer *mixer );
|
||||
void AddToReferencedList( CAudioMixer *mixer, CAudioBuffer *buffer );
|
||||
void RemoveFromReferencedList( CAudioMixer *mixer, CAudioBuffer *buffer );
|
||||
bool IsSourceReferencedByActiveBuffer( CAudioMixer *mixer );
|
||||
bool IsSoundInReferencedList( CAudioMixer *mixer, CAudioBuffer *buffer );
|
||||
|
||||
// Compute how many samples we've mixed since most recent buffer submission
|
||||
void ComputeSampleAheadAmount( void );
|
||||
|
||||
HWAVEOUT m_deviceHandle;
|
||||
|
||||
float m_mixTime;
|
||||
float m_baseTime;
|
||||
int m_sampleIndex;
|
||||
CAudioBuffer m_buffers[ OUTPUT_BUFFER_COUNT ];
|
||||
|
||||
CAudioMixer *m_sourceList[MAX_CHANNELS];
|
||||
int m_nEstimatedSamplesAhead;
|
||||
public:
|
||||
CAudioDeviceSWMix m_audioDevice;
|
||||
|
||||
};
|
||||
#endif // AUDIOWAVEOUTPUT_H
|
||||
Reference in New Issue
Block a user