aboutsummaryrefslogtreecommitdiff
path: root/sdl_audio.ha
blob: 545668cabff4e169d58ff9eb9fc69914abf27280 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use sdl2;
use types::c;

type SDL_AudioFormat = u16;

def AUDIO_U8: SDL_AudioFormat = 0x0008;
def AUDIO_S8: SDL_AudioFormat = 0x8008;
def AUDIO_U16LSB: SDL_AudioFormat = 0x0010;
def AUDIO_S16LSB: SDL_AudioFormat = 0x8010;
def AUDIO_U16MSB: SDL_AudioFormat = 0x1010;
def AUDIO_S16MSB: SDL_AudioFormat = 0x9010;
def AUDIO_U16: SDL_AudioFormat = AUDIO_U16LSB;
def AUDIO_S16: SDL_AudioFormat = AUDIO_S16LSB;
def AUDIO_S32LSB: SDL_AudioFormat = 0x8020;
def AUDIO_S32MSB: SDL_AudioFormat = 0x9020;
def AUDIO_S32: SDL_AudioFormat = AUDIO_S32LSB;
def AUDIO_F32LSB: SDL_AudioFormat = 0x8120;
def AUDIO_F32MSB: SDL_AudioFormat = 0x9120;
def AUDIO_F32: SDL_AudioFormat = AUDIO_F32LSB;

type SDL_AudioCallback = *fn(userdata: nullable *opaque, stream: *u8, len_: int) void;

type SDL_AudioSpec = struct {
	freq: int,
	format: SDL_AudioFormat,
	channels: u8,
	silence: u8,
	samples: u16,
	padding: u16,
	size_: u32,
	callback: SDL_AudioCallback,
	userdata: nullable *opaque
};

type SDL_AudioDeviceID = u32;

@symbol("SDL_OpenAudioDevice") fn _SDL_OpenAudioDevice(device: nullable *c::char, iscapture: int, desired: const *SDL_AudioSpec, obtained: *SDL_AudioSpec, allowed_changes: int) SDL_AudioDeviceID;

@symbol("SDL_CloseAudioDevice") fn SDL_CloseAudioDevice(dev: SDL_AudioDeviceID) void;

@symbol("SDL_PauseAudioDevice") fn SDL_PauseAudioDevice(dev: SDL_AudioDeviceID, pause_on: int) void;

@symbol("SDL_GetError") fn SDL_GetError() const *c::char;

fn SDL_OpenAudioDevice(device: nullable *c::char, iscapture: int, desired: const *SDL_AudioSpec, obtained: *SDL_AudioSpec, allowed_changes: int) (SDL_AudioDeviceID | sdl2::error) = {
	const ret = _SDL_OpenAudioDevice(device, iscapture, desired, obtained, allowed_changes);

	if (ret == 0) {
		return c::tostr(SDL_GetError()): sdl2::error;
	};

	return ret;
};