source-engine/soundsystem/snd_wave_source.h

77 lines
1.7 KiB
C
Raw Permalink Normal View History

2020-04-23 00:56:21 +08:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
// $NoKeywords: $
//=============================================================================//
#ifndef SND_WAVE_SOURCE_H
#define SND_WAVE_SOURCE_H
#ifdef _WIN32
#pragma once
#endif
#include "soundsystem/snd_audio_source.h"
#include "sentence.h"
class IterateRIFF;
class CAudioSourceWave : public CAudioSource
{
public:
CAudioSourceWave( void );
~CAudioSourceWave( void );
void Setup( const char *pFormat, int formatSize, IterateRIFF &walk );
virtual int SampleRate( void ) { return m_rate; }
inline int SampleSize( void ) { return m_sampleSize; }
virtual float TrueSampleSize( void );
void *GetHeader( void );
// Legacy
virtual void ParseChunk( IterateRIFF &walk, int chunkName );
virtual void ParseSentence( IterateRIFF &walk );
void ConvertSamples( char *pData, int sampleCount );
bool IsLooped( void ) { return (m_loopStart >= 0) ? true : false; }
bool IsStreaming( void ) { return false; }
int ConvertLoopedPosition( int samplePosition );
int SampleCount( void );
virtual float GetRunningLength( void )
{
if ( m_rate > 0.0 )
{
return (float)SampleCount() / m_rate;
}
return 0.0f; }
CSentence *GetSentence( void );
protected:
// returns the loop start from a cue chunk
int ParseCueChunk( IterateRIFF &walk );
void Init( const char *pHeaderBuffer, int headerSize );
int m_bits;
int m_rate;
int m_channels;
int m_format;
int m_sampleSize;
int m_loopStart;
int m_sampleCount;
private:
char *m_pHeader;
CSentence m_Sentence;
};
#endif // SND_WAVE_SOURCE_H