Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Rubberduckycooly
GitHub Repository: Rubberduckycooly/RSDKv5-Decompilation
Path: blob/master/RSDKv5/RSDK/Audio/SDL2/SDL2AudioDevice.cpp
1163 views
1
2
uint8 AudioDevice::contextInitialized;
3
4
SDL_AudioDeviceID AudioDevice::device;
5
SDL_AudioSpec AudioDevice::deviceSpec;
6
7
bool32 AudioDevice::Init()
8
{
9
SDL_InitSubSystem(SDL_INIT_AUDIO);
10
if (!contextInitialized) {
11
contextInitialized = true;
12
InitAudioChannels();
13
}
14
15
SDL_AudioSpec want;
16
want.freq = AUDIO_FREQUENCY;
17
want.format = AUDIO_F32SYS;
18
want.samples = MIX_BUFFER_SIZE / AUDIO_CHANNELS;
19
want.channels = AUDIO_CHANNELS;
20
want.callback = AudioCallback;
21
22
audioState = false;
23
if ((device = SDL_OpenAudioDevice(nullptr, 0, &want, &deviceSpec, SDL_AUDIO_ALLOW_SAMPLES_CHANGE)) > 0) {
24
SDL_PauseAudioDevice(device, SDL_FALSE);
25
audioState = true;
26
}
27
else {
28
PrintLog(PRINT_NORMAL, "ERROR: Unable to open audio device!");
29
PrintLog(PRINT_NORMAL, "ERROR: %s", SDL_GetError());
30
}
31
32
return true;
33
}
34
35
void AudioDevice::Release()
36
{
37
SDL_PauseAudioDevice(device, SDL_TRUE);
38
39
LockAudioDevice();
40
AudioDeviceBase::Release();
41
UnlockAudioDevice();
42
43
SDL_CloseAudioDevice(device);
44
SDL_QuitSubSystem(SDL_INIT_AUDIO);
45
}
46
47
void AudioDevice::InitAudioChannels()
48
{
49
AudioDeviceBase::InitAudioChannels();
50
}
51
52
void AudioDevice::AudioCallback(void *data, uint8 *stream, int32 len)
53
{
54
(void)data; // Unused
55
56
AudioDevice::ProcessAudioMixing(stream, len / sizeof(SAMPLE_FORMAT));
57
}
58
59