1#ifndef RAGE_SOUND_DRIVER
2#define RAGE_SOUND_DRIVER
4#include "RageUtil/Misc/RageThreads.h"
5#include "RageUtil/Misc/RageTimer.h"
6#include "RageUtil/Utils/RageUtil_CircularBuffer.h"
7#include "arch/RageDriver.h"
12static const int samples_per_block = 512;
20 static std::string GetDefaultSoundDriverList();
28 virtual std::string Init() {
return std::string(); }
51 int64_t GetHardwareFrame(
RageTimer* pTimer)
const;
52 virtual int64_t GetPosition()
const = 0;
59 virtual void Update();
63 virtual float GetPlayLatency()
const {
return 0.0f; }
65 virtual int GetSampleRate()
const {
return 44100; }
70 void StartDecodeThread();
77 void SetDecodeBufferSize(
int frames);
81 virtual void SetupDecodingThread() {}
96 void Mix(int16_t* pBuf,
99 int64_t iCurrentFrame);
100 void Mix(
float* pBuf,
102 int64_t iFrameNumber,
103 int64_t iCurrentFrame);
105 void MixDeinterlaced(
float** pBufs,
108 int64_t iFrameNumber,
109 int64_t iCurrentFrame);
168 float m_Buffer[samples_per_block];
170 int m_FramesInBuffer{ 0 };
173 : m_BufferNext(m_Buffer)
182 void Allocate(
int iFrames);
194 int64_t iStreamFrame;
195 int64_t iHardwareFrame;
219 int64_t ClampHardwareFrame(int64_t iHardwareFrame)
const;
220 mutable int64_t m_iMaxHardwareFrame;
222 bool m_bShutdownDecodeThread;
224 static int DecodeThread_start(
void* p);
227 int64_t iFrameNumber,
228 int64_t iCurrentFrame);
231 int GetDataForSound(Sound& s);
235#define REGISTER_SOUND_DRIVER_CLASS2(name, x) \
236 static RegisterRageDriver register_##x( \
237 &RageSoundDriver::m_pDriverList, \
239 CreateClass<RageSoundDriver_##x, RageDriver>)
240#define REGISTER_SOUND_DRIVER_CLASS(name) \
241 REGISTER_SOUND_DRIVER_CLASS2(name, name)
Definition RageUtil_CircularBuffer.h:10
Definition RageDriver.h:7
Definition RageThreads.h:232
Definition RageSound.h:27
Definition RageSoundDriver.h:15
Definition RageSoundManager.h:18
Definition RageSoundMixBuffer.h:7
Thread, mutex, semaphore, and event classes.
Definition RageThreads.h:155
Definition RageDriver.h:17
Definition RageSoundDriver.h:192