mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 14:07:48 +00:00
1
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Mixer for ADPCM encoded audio
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef SND_WAVE_MIXER_MP3_H
|
||||
#define SND_WAVE_MIXER_MP3_H
|
||||
#pragma once
|
||||
|
||||
#include "vaudio/ivaudio.h"
|
||||
|
||||
static const int MP3_BUFFER_SIZE = 16384;
|
||||
|
||||
class CAudioMixerWaveMP3 : public CAudioMixerWave, public IAudioStreamEvent
|
||||
{
|
||||
public:
|
||||
CAudioMixerWaveMP3( IWaveData *data );
|
||||
~CAudioMixerWaveMP3( void );
|
||||
|
||||
virtual void Mix( IAudioDevice *pDevice, channel_t *pChannel, void *pData, int outputOffset, int inputOffset, fixedint fracRate, int outCount, int timecompress );
|
||||
virtual int GetOutputData( void **pData, int sampleCount, char copyBuf[AUDIOSOURCE_COPYBUF_SIZE] );
|
||||
|
||||
// need to override this to fixup blocks
|
||||
// UNDONE: This doesn't quite work with MP3 - we need a MP3 position, not a sample position
|
||||
void SetSampleStart( int newPosition );
|
||||
|
||||
int GetPositionForSave() { return GetStream() ? GetStream()->GetPosition() : 0; }
|
||||
void SetPositionFromSaved(int position) { if ( GetStream() ) GetStream()->SetPosition(position); }
|
||||
|
||||
// IAudioStreamEvent
|
||||
virtual int StreamRequestData( void *pBuffer, int bytesRequested, int offset );
|
||||
|
||||
virtual void SetStartupDelaySamples( int delaySamples );
|
||||
virtual int GetMixSampleSize() { return CalcSampleSize( 16, m_channelCount ); }
|
||||
|
||||
virtual int GetStreamOutputRate() { return GetStream() ? GetStream()->GetOutputRate() : 0; }
|
||||
|
||||
private:
|
||||
IAudioStream *GetStream();
|
||||
bool DecodeBlock( void );
|
||||
void GetID3HeaderOffset();
|
||||
|
||||
// Lazily initialized, use GetStream
|
||||
IAudioStream *m_pStream;
|
||||
bool m_bStreamInit;
|
||||
|
||||
char m_samples[MP3_BUFFER_SIZE];
|
||||
int m_sampleCount;
|
||||
int m_samplePosition;
|
||||
int m_channelCount;
|
||||
int m_offset;
|
||||
int m_delaySamples;
|
||||
int m_headerOffset;
|
||||
};
|
||||
|
||||
CAudioMixerWaveMP3 *CreateMP3Mixer( IWaveData *data );
|
||||
|
||||
#endif // SND_WAVE_MIXER_MP3_H
|
||||
Reference in New Issue
Block a user