diff options
Diffstat (limited to 'v_windows/v/vlib/sokol/audio')
| -rw-r--r-- | v_windows/v/vlib/sokol/audio/audio.v | 134 | 
1 files changed, 134 insertions, 0 deletions
diff --git a/v_windows/v/vlib/sokol/audio/audio.v b/v_windows/v/vlib/sokol/audio/audio.v new file mode 100644 index 0000000..50acb7f --- /dev/null +++ b/v_windows/v/vlib/sokol/audio/audio.v @@ -0,0 +1,134 @@ +module audio + +$if linux { +	// provide a nicer error for the user that does not have ALSA installed +	#include <alsa/asoundlib.h> # Please install the `libasound2-dev` package +} + +#flag -I @VEXEROOT/thirdparty/sokol +#define SOKOL_IMPL +#include "sokol_audio.h" +#flag linux -lasound +#flag darwin -framework AudioToolbox +#flag windows -lole32 + +// +pub type FNStreamingCB = fn (buffer &f32, num_frames int, num_channels int) + +pub type FnStreamingCBWithUserData = fn (buffer &f32, num_frames int, num_channels int, user_data voidptr) + +pub fn (x FNStreamingCB) str() string { +	return '&FNStreamingCB{ ${ptr_str(x)} }' +} + +pub fn (x FnStreamingCBWithUserData) str() string { +	return '&FnStreamingCBWithUserData{ ${ptr_str(x)} }' +} + +// +pub struct C.saudio_desc { +	sample_rate        int +	num_channels       int +	buffer_frames      int +	packet_frames      int +	num_packets        int +	stream_cb          FNStreamingCB +	stream_userdata_cb FnStreamingCBWithUserData +	user_data          voidptr +} + +fn C.saudio_setup(desc &C.saudio_desc) + +fn C.saudio_shutdown() + +fn C.saudio_isvalid() bool + +fn C.saudio_userdata() voidptr + +fn C.saudio_query_desc() C.saudio_desc + +fn C.saudio_sample_rate() int + +fn C.saudio_buffer_frames() int + +fn C.saudio_channels() int + +fn C.saudio_expect() int + +fn C.saudio_push(frames &f32, num_frames int) int + +// audio.setup - setup sokol-audio +pub fn setup(desc C.saudio_desc) { +	C.saudio_setup(&desc) +} + +// audio.shutdown - shutdown sokol-audio +pub fn shutdown() { +	C.saudio_shutdown() +} + +// audio.is_valid - true after setup if audio backend was successfully initialized +pub fn is_valid() bool { +	return C.saudio_isvalid() +} + +// audio.userdata - return the saudio_desc.user_data pointer +pub fn user_data() voidptr { +	return C.saudio_userdata() +} + +// audio.query - return a copy of the original saudio_desc struct +pub fn query() C.saudio_desc { +	return C.saudio_query_desc() +} + +// audio.sample_rate - actual sample rate +pub fn sample_rate() int { +	return C.saudio_sample_rate() +} + +// audio.buffer_frames - return actual backend buffer size in number of frames +pub fn buffer_frames() int { +	return C.saudio_buffer_frames() +} + +// audio.channels - actual number of channels +pub fn channels() int { +	return C.saudio_channels() +} + +// audio.expect - get current number of frames to fill packet queue; use in combination with audio.push/2 +pub fn expect() int { +	return C.saudio_expect() +} + +// audio.push - push sample frames from main thread, returns number of frames actually pushed +pub fn push(frames &f32, num_frames int) int { +	return C.saudio_push(frames, num_frames) +} + +// +[inline] +pub fn fclamp(x f32, flo f32, fhi f32) f32 { +	if x > fhi { +		return fhi +	} +	if x < flo { +		return flo +	} +	return x +} + +pub fn min(x int, y int) int { +	if x < y { +		return x +	} +	return y +} + +pub fn max(x int, y int) int { +	if x < y { +		return y +	} +	return x +}  | 
