mirror of
https://github.com/GTAmodding/re3.git
synced 2025-10-10 02:10:34 +00:00
oal wav/mp3 stream update
This commit is contained in:
parent
73c809f616
commit
12a3499ca3
19 changed files with 13006 additions and 106 deletions
|
@ -4,8 +4,56 @@
|
|||
#ifdef AUDIO_OAL
|
||||
#include <AL/al.h>
|
||||
|
||||
#define NUM_STREAMBUFFERS 5
|
||||
#define STREAMBUFFER_SIZE 0x4000
|
||||
#define NUM_STREAMBUFFERS 4
|
||||
|
||||
class IDecoder
|
||||
{
|
||||
public:
|
||||
virtual ~IDecoder() { }
|
||||
|
||||
virtual bool IsOpened() = 0;
|
||||
|
||||
virtual uint32 GetSampleSize() = 0;
|
||||
virtual uint32 GetSampleCount() = 0;
|
||||
virtual uint32 GetSampleRate() = 0;
|
||||
virtual uint32 GetChannels() = 0;
|
||||
|
||||
uint32 GetAvgSamplesPerSec()
|
||||
{
|
||||
return GetChannels() * GetSampleRate();
|
||||
}
|
||||
|
||||
uint32 ms2samples(uint32 ms)
|
||||
{
|
||||
return float(ms) / 1000.0f * float(GetChannels()) * float(GetSampleRate());
|
||||
}
|
||||
|
||||
uint32 samples2ms(uint32 sm)
|
||||
{
|
||||
return float(sm) * 1000.0f / float(GetChannels()) / float(GetSampleRate());
|
||||
}
|
||||
|
||||
uint32 GetBufferSamples()
|
||||
{
|
||||
//return (GetAvgSamplesPerSec() >> 2) - (GetSampleCount() % GetChannels());
|
||||
return (GetAvgSamplesPerSec() / 4); // 250ms
|
||||
}
|
||||
|
||||
uint32 GetBufferSize()
|
||||
{
|
||||
return GetBufferSamples() * GetSampleSize();
|
||||
}
|
||||
|
||||
virtual void Seek(uint32 milliseconds) = 0;
|
||||
virtual uint32 Tell() = 0;
|
||||
|
||||
uint32 GetLength()
|
||||
{
|
||||
return float(GetSampleCount()) * 1000.0f / float(GetSampleRate());
|
||||
}
|
||||
|
||||
virtual uint32 Decode(void *buffer) = 0;
|
||||
};
|
||||
|
||||
class CStream
|
||||
{
|
||||
|
@ -13,30 +61,34 @@ class CStream
|
|||
ALuint &m_alSource;
|
||||
ALuint (&m_alBuffers)[NUM_STREAMBUFFERS];
|
||||
|
||||
bool m_bIsOpened;
|
||||
bool m_bPaused;
|
||||
|
||||
uint32 m_nLength;
|
||||
uint32 m_nLengthMS;
|
||||
uint32 m_nBitRate;
|
||||
bool m_bActive;
|
||||
|
||||
unsigned long m_nFormat;
|
||||
unsigned long m_nFreq;
|
||||
|
||||
uint32 m_nBufferSize;
|
||||
void *m_pBuffer;
|
||||
|
||||
ALint iTotalBuffersProcessed;
|
||||
bool m_bReset;
|
||||
uint32 m_nVolume;
|
||||
uint8 m_nPan;
|
||||
uint32 m_nPosBeforeReset;
|
||||
|
||||
IDecoder *m_pSoundFile;
|
||||
|
||||
bool HasSource();
|
||||
void SetPosition(float x, float y, float z);
|
||||
void SetPitch(float pitch);
|
||||
void SetGain(float gain);
|
||||
void Pause();
|
||||
void SetPlay(bool state);
|
||||
|
||||
bool FillBuffer(ALuint alBuffer);
|
||||
int32 FillBuffers();
|
||||
void ClearBuffers();
|
||||
public:
|
||||
static void Initialise();
|
||||
static void Terminate();
|
||||
|
||||
CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUFFERS]);
|
||||
~CStream();
|
||||
|
||||
void Delete();
|
||||
|
||||
bool IsOpened();
|
||||
|
@ -44,14 +96,17 @@ public:
|
|||
void SetPause (bool bPause);
|
||||
void SetVolume(uint32 nVol);
|
||||
void SetPan (uint8 nPan);
|
||||
void SetPos (uint32 nPos);
|
||||
|
||||
uint32 GetPos();
|
||||
uint32 GetLength();
|
||||
void SetPosMS (uint32 nPos);
|
||||
uint32 GetPosMS();
|
||||
uint32 GetLengthMS();
|
||||
|
||||
bool Setup();
|
||||
void Start();
|
||||
void Stop();
|
||||
void Update(void);
|
||||
|
||||
void ProviderInit();
|
||||
void ProviderTerm();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue