Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Rubberduckycooly
GitHub Repository: Rubberduckycooly/RSDKv5-Decompilation
Path: blob/master/RSDKv5/RSDK/Audio/XAudio/XAudioDevice.hpp
1174 views
1
#define LockAudioDevice() EnterCriticalSection(&AudioDevice::criticalSection)
2
#define UnlockAudioDevice() LeaveCriticalSection(&AudioDevice::criticalSection)
3
4
// DX9
5
namespace RSDK
6
{
7
class AudioDeviceCallback : public IXAudio2VoiceCallback
8
{
9
void WINAPI OnVoiceProcessingPassStart(UINT32 BytesRequired) {}
10
void WINAPI OnVoiceProcessingPassEnd() {}
11
void WINAPI OnStreamEnd() {}
12
void WINAPI OnBufferStart(void *pBufferContext) {}
13
void WINAPI OnBufferEnd(void *pBufferContext);
14
void WINAPI OnLoopEnd(void *pBufferContext) {}
15
void WINAPI OnVoiceError(void *pBufferContext, HRESULT Error) {}
16
};
17
18
#ifdef __GNUC__
19
// using clang to compile? stfu
20
#pragma GCC diagnostic push
21
#pragma GCC diagnostic ignored "-Wmicrosoft-exception-spec"
22
#endif
23
24
class AudioEngineCallback : public IXAudio2EngineCallback
25
{
26
void WINAPI OnProcessingPassStart(void) {}
27
void WINAPI OnProcessingPassEnd(void) {}
28
void WINAPI OnCriticalError(HRESULT Error);
29
};
30
31
#ifdef __GNUC__
32
#pragma GCC diagnostic pop
33
#endif
34
35
struct AudioDevice : public AudioDeviceBase {
36
static bool32 Init();
37
static void Release();
38
39
static void FrameInit();
40
41
static void HandleStreamLoad(ChannelInfo *channel, bool32 async);
42
43
static uint8 contextInitialized;
44
45
static IXAudio2 *audioContext;
46
static IXAudio2MasteringVoice *masteringVoice;
47
static IXAudio2SourceVoice *sourceVoice;
48
static AudioDeviceCallback voiceCallback;
49
static AudioEngineCallback engineCallback;
50
51
static RTL_CRITICAL_SECTION criticalSection;
52
53
static int32 mixBufferID;
54
static SAMPLE_FORMAT mixBuffer[3][MIX_BUFFER_SIZE];
55
56
private:
57
static void InitAudioChannels();
58
static void InitMixBuffer();
59
static HRESULT InitContext();
60
61
DWORD static WINAPI LoadStreamASync(LPVOID channel)
62
{
63
LoadStream((ChannelInfo *)channel);
64
return 0;
65
}
66
};
67
} // namespace RSDK
68