initial commit
This commit is contained in:
+348
@@ -0,0 +1,348 @@
|
||||
package pulse
|
||||
|
||||
import "core:text/regex/virtual_machine"
|
||||
import "core:sys/posix"
|
||||
import "core:c"
|
||||
|
||||
foreign import pulse "system:pulse"
|
||||
|
||||
pa_context_flags :: enum c.int {
|
||||
NOFLAGS,
|
||||
NOAUTOSPAWN,
|
||||
NOFAIL,
|
||||
}
|
||||
|
||||
pa_io_event_flags_bits :: enum c.int {
|
||||
INPUT,
|
||||
OUTPUT,
|
||||
HANGUP,
|
||||
ERROR,
|
||||
}
|
||||
|
||||
pa_context_state :: enum c.int {
|
||||
UNCONNECTED,
|
||||
CONNECTING,
|
||||
AUTHORIZING,
|
||||
SETTING_NAME,
|
||||
READY,
|
||||
FAILED,
|
||||
TERMINATED,
|
||||
}
|
||||
|
||||
pa_update_mode :: enum c.int {
|
||||
SET,
|
||||
MERGE,
|
||||
REPLACE,
|
||||
}
|
||||
|
||||
pa_sink_flags_bits :: enum c.int {
|
||||
HW_VOLUME_CTRL,
|
||||
LATENCY,
|
||||
HARDWARE,
|
||||
NETWORK,
|
||||
HW_MUTE_CTRL,
|
||||
DECIBEL_VOLUME,
|
||||
FLAT_VOLUME,
|
||||
DYNAMIC_LATENCY,
|
||||
SET_FORMATS,
|
||||
}
|
||||
|
||||
pa_sink_state :: enum c.int {
|
||||
INVALID = -1,
|
||||
RUNNING,
|
||||
IDLE,
|
||||
SUSPENDED,
|
||||
}
|
||||
|
||||
pa_port_available :: enum c.int {
|
||||
UNKNOWN,
|
||||
NO,
|
||||
YES,
|
||||
}
|
||||
|
||||
pa_device_port_type :: enum u32 {
|
||||
UNKNOWN,
|
||||
AUX,
|
||||
SPEAKER,
|
||||
HEADPHONES,
|
||||
LINE,
|
||||
MIC,
|
||||
HEADSET,
|
||||
HANDSET,
|
||||
EARPIECE,
|
||||
SPDIF,
|
||||
HDMI,
|
||||
TV,
|
||||
RADIO,
|
||||
VIDEO,
|
||||
USB,
|
||||
BLUETOOTH,
|
||||
PORTABLE,
|
||||
HANDSFREE,
|
||||
CAR,
|
||||
HIFI,
|
||||
PHONE,
|
||||
NETWORK,
|
||||
ANALOG,
|
||||
}
|
||||
|
||||
pa_encoding :: enum c.int {
|
||||
INVALID = -1,
|
||||
ANY,
|
||||
PCM,
|
||||
AC3_IEC61937,
|
||||
EAC_3_IEC61937,
|
||||
MPEG_IEC61937,
|
||||
DTS_IEC61937,
|
||||
MPEG2_AAC_IEC61937,
|
||||
TRUEHD_IEC61937,
|
||||
DTSHD_IEC61937,
|
||||
}
|
||||
|
||||
pa_operation_state :: enum c.int {
|
||||
RUNNING,
|
||||
DONE,
|
||||
CANCELLED,
|
||||
}
|
||||
|
||||
pa_source_flags_bits :: enum c.int {
|
||||
HW_VOLUME_CTRL,
|
||||
LATENCY,
|
||||
HARDWARE,
|
||||
NETWORK,
|
||||
HW_MUTE_CTRL,
|
||||
DECIBEL_VOLUME,
|
||||
DYNAMIC_LATENCY,
|
||||
FLAT_VOLUME,
|
||||
}
|
||||
|
||||
pa_source_state :: enum c.int {
|
||||
INVALID = -1,
|
||||
RUNNING,
|
||||
IDLE,
|
||||
SUSPENDED,
|
||||
}
|
||||
|
||||
pa_stream_flags_bits :: enum c.int {
|
||||
START_CORKED,
|
||||
INTERPOLATE_TIMING,
|
||||
NOT_MONOTONIC,
|
||||
AUTO_TIMING_UPDATE,
|
||||
NO_REMAP_CHANNELS,
|
||||
NO_REMIX_CHANNELS,
|
||||
FIX_FORMAT,
|
||||
FIX_RATE,
|
||||
FIX_CHANNELS,
|
||||
DONT_MOVE,
|
||||
VARIABLE_RATE,
|
||||
PEAK_DETECT,
|
||||
START_MUTED,
|
||||
ADJUST_LATENCY,
|
||||
EARLY_REQUESTS,
|
||||
DONT_INHIBIT_AUTO_SUSPEND,
|
||||
START_UNMUTED,
|
||||
FAIL_ON_SUSPEND,
|
||||
RELATIVE_VOLUME,
|
||||
PASSTHROUGH,
|
||||
}
|
||||
|
||||
pa_stream_flags :: bit_set[pa_stream_flags_bits; c.int]
|
||||
|
||||
pa_sink_flags :: bit_set[pa_sink_flags_bits; c.int]
|
||||
pa_io_event_flags :: bit_set[pa_io_event_flags_bits; c.int]
|
||||
pa_source_flags :: bit_set[pa_source_flags_bits; c.int]
|
||||
|
||||
pa_mainloop :: struct{}
|
||||
pa_context :: struct{}
|
||||
pa_io_event :: struct{}
|
||||
pa_time_event :: struct{}
|
||||
pa_defer_event :: struct{}
|
||||
pa_operation :: struct{}
|
||||
pa_proplist :: struct{}
|
||||
pa_stream :: struct{}
|
||||
|
||||
pa_volume :: u32
|
||||
|
||||
pa_cvolume :: struct {
|
||||
channels: u8,
|
||||
values: [PA_CHANNELS_MAX]pa_volume,
|
||||
}
|
||||
|
||||
pa_sink_port_info :: struct {
|
||||
name: cstring,
|
||||
description: cstring,
|
||||
priority: u32,
|
||||
available: pa_port_available,
|
||||
availability_group: cstring,
|
||||
type: pa_device_port_type,
|
||||
}
|
||||
|
||||
pa_format_info :: struct {
|
||||
encoding: pa_encoding,
|
||||
plist: ^pa_proplist,
|
||||
}
|
||||
|
||||
pa_sink_info :: struct {
|
||||
name: cstring,
|
||||
index: u32,
|
||||
description: cstring,
|
||||
sample_spec: pa_sample_spec,
|
||||
channel_map: pa_channel_map,
|
||||
owner_module: u32,
|
||||
volume: pa_cvolume,
|
||||
mute: c.int,
|
||||
monitor_source: u32,
|
||||
monitor_source_name: cstring,
|
||||
latency: pa_usec,
|
||||
driver: cstring,
|
||||
flags: pa_sink_flags,
|
||||
proplist: ^pa_proplist,
|
||||
configured_latency: pa_usec,
|
||||
base_volume: pa_volume,
|
||||
state: pa_sink_state,
|
||||
n_volume_steps: u32,
|
||||
card: u32,
|
||||
n_ports: u32,
|
||||
ports: [^]^pa_sink_port_info,
|
||||
active_port: ^pa_sink_port_info,
|
||||
n_formats: u8,
|
||||
formats: [^]^pa_format_info,
|
||||
}
|
||||
|
||||
pa_source_port_info :: struct {
|
||||
name: cstring,
|
||||
description: cstring,
|
||||
priority: u32,
|
||||
available: pa_port_available,
|
||||
availability_group: cstring,
|
||||
type: pa_device_port_type,
|
||||
}
|
||||
|
||||
pa_source_info :: struct {
|
||||
name: cstring,
|
||||
index: u32,
|
||||
description: cstring,
|
||||
sample_spec: pa_sample_spec,
|
||||
channel_map: pa_channel_map,
|
||||
owner_module: u32,
|
||||
volume: pa_cvolume,
|
||||
mute: c.int,
|
||||
monitor_of_sink: u32,
|
||||
monitor_of_sink_name: cstring,
|
||||
latency: pa_usec,
|
||||
driver: cstring,
|
||||
flags: pa_source_flags,
|
||||
proplist: ^pa_proplist,
|
||||
configured_latency: pa_usec,
|
||||
base_volume: pa_volume,
|
||||
state: pa_source_state,
|
||||
n_volume_steps: u32,
|
||||
card: u32,
|
||||
n_ports: u32,
|
||||
ports: [^]^pa_source_port_info,
|
||||
active_port: ^pa_source_port_info,
|
||||
n_formats: u8,
|
||||
formats: [^]^pa_format_info,
|
||||
}
|
||||
|
||||
pa_poll_func :: #type proc "c" (ufds: ^posix.pollfd, nfds: c.ulong, timeout: c.int, userdata: rawptr) -> c.int
|
||||
pa_io_event_cb :: #type proc "c" (ea: ^pa_mainloop_api, e: ^pa_io_event, fd: c.int, events: pa_io_event_flags, userdata: rawptr)
|
||||
pa_io_event_destroy_cb :: #type proc "c" (a: ^pa_mainloop_api, e: ^pa_io_event, userdata: rawptr)
|
||||
pa_time_event_cb :: #type proc "c" (a: ^pa_mainloop_api, e: ^pa_time_event, tv: ^posix.timeval, userdata: rawptr)
|
||||
pa_time_event_destroy_cb :: #type proc "c" (a: ^pa_mainloop_api, e: ^pa_time_event, userdata: rawptr)
|
||||
pa_defer_event_cb :: #type proc "c" (a: ^pa_mainloop_api, e: ^pa_defer_event, userdata: rawptr)
|
||||
pa_defer_event_destroy_cb :: #type proc "c" (a: ^pa_mainloop_api, e: ^pa_defer_event, userdata: rawptr)
|
||||
pa_context_success_cb :: #type proc "c" (_c: ^pa_context, success: c.int, userdata: rawptr)
|
||||
pa_context_notify_cb :: #type proc "c" (c: ^pa_context, userdata: rawptr)
|
||||
pa_context_event_cb :: #type proc "c" (c: ^pa_context, name: cstring, p: ^pa_proplist, userdata: rawptr)
|
||||
pa_sink_info_cb :: #type proc "c" (_c: ^pa_context, i: ^pa_sink_info, end_of_list: b32, userdata: rawptr)
|
||||
pa_source_info_cb :: #type proc "c" (_c: ^pa_context, i: ^pa_source_info, end_of_list: b32, userdata: rawptr)
|
||||
pa_operation_notify_cb :: #type proc "c" (o: ^pa_operation, userdata: rawptr)
|
||||
pa_stream_request_cb :: #type proc "c" (p: ^pa_stream, nbytes: c.size_t, userdata: rawptr)
|
||||
|
||||
pa_spawn_api :: struct {
|
||||
prefork: #type proc "c" (),
|
||||
postfork: #type proc "c" (),
|
||||
atfork: #type proc "c" (),
|
||||
}
|
||||
|
||||
pa_mainloop_api :: struct {
|
||||
userdata: rawptr,
|
||||
io_new: #type proc "c" (a: ^pa_mainloop_api, fd: c.int, events: pa_io_event_flags, cb: pa_io_event_cb, userdata: rawptr) -> ^pa_io_event,
|
||||
io_enable: #type proc "c" (e: ^pa_io_event, events: pa_io_event_flags),
|
||||
io_free: #type proc "c" (e: ^pa_io_event),
|
||||
io_set_destroy: #type proc "c" (e: ^pa_io_event, cb: pa_io_event_destroy_cb),
|
||||
time_new: #type proc "c" (a: ^pa_mainloop_api, tv: ^posix.timeval, cb: pa_time_event_cb, userdata: rawptr) -> ^pa_time_event,
|
||||
time_restart: #type proc "c" (e: ^pa_time_event, tv: ^posix.timeval),
|
||||
time_free: #type proc "c" (e: ^pa_time_event),
|
||||
time_set_destroy: #type proc "c" (e: ^pa_time_event, cb: pa_time_event_destroy_cb),
|
||||
defer_new: #type proc "c" (a: ^pa_mainloop_api, cb: pa_defer_event_cb, userdata: rawptr) -> ^pa_defer_event,
|
||||
defer_enable: #type proc "c" (e: ^pa_defer_event, b: c.int),
|
||||
defer_free: #type proc "c" (e: ^pa_defer_event),
|
||||
defer_set_destroy: #type proc "c" (e: ^pa_defer_event, cb: pa_defer_event_destroy_cb),
|
||||
quit: #type proc "c" (a: ^pa_mainloop_api, retval: c.int),
|
||||
}
|
||||
|
||||
@(link_prefix="pa_")
|
||||
foreign pulse {
|
||||
strerror :: proc(error: c.int) -> cstring ---
|
||||
|
||||
mainloop_new :: proc() -> ^pa_mainloop ---
|
||||
mainloop_free :: proc(m: ^pa_mainloop) ---
|
||||
mainloop_prepare :: proc(m: ^pa_mainloop, timeout: c.int) -> c.int ---
|
||||
mainloop_poll :: proc(m: ^pa_mainloop) -> c.int ---
|
||||
mainloop_dispatch :: proc(m: ^pa_mainloop) -> c.int ---
|
||||
mainloop_get_retval :: proc(m: ^pa_mainloop) -> c.int ---
|
||||
mainloop_iterate :: proc(m: ^pa_mainloop, block: b32, retval: ^c.int) -> c.int ---
|
||||
mainloop_run :: proc(m: ^pa_mainloop, retval: ^c.int) -> c.int ---
|
||||
mainloop_get_api :: proc(m: ^pa_mainloop) -> ^pa_mainloop_api ---
|
||||
mainloop_quit :: proc(m: ^pa_mainloop, retval: c.int) ---
|
||||
mainloop_wakeup :: proc(m: ^pa_mainloop) ---
|
||||
mainloop_set_poll_func :: proc(m: ^pa_mainloop, poll_func: pa_poll_func, userdata: rawptr) ---
|
||||
|
||||
context_new :: proc(mainloop: ^pa_mainloop_api, name: cstring) -> ^pa_context ---
|
||||
context_new_with_proplist :: proc(mainloop: ^pa_mainloop_api, name: cstring, proplist: ^pa_proplist) -> ^pa_context ---
|
||||
context_unref :: proc(c: ^pa_context) ---
|
||||
context_ref :: proc(c: ^pa_context) -> ^pa_context ---
|
||||
context_set_state_callback :: proc(c: ^pa_context, cb: pa_context_notify_cb, userdata: rawptr) ---
|
||||
context_set_event_callback :: proc(c: ^pa_context, cb: pa_context_event_cb, userdata: rawptr) ---
|
||||
context_errno :: proc(_c: ^pa_context) -> c.int ---
|
||||
context_is_pending :: proc(_c: ^pa_context) -> c.int ---
|
||||
context_get_state :: proc(c: ^pa_context) -> pa_context_state ---
|
||||
context_connect :: proc(_c: ^pa_context, server: cstring, flags: pa_context_flags, api: ^pa_spawn_api) -> c.int ---
|
||||
context_disconnect :: proc(_c: ^pa_context) ---
|
||||
context_drain :: proc(c: ^pa_context, cb: pa_context_notify_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_exit_daemon :: proc(c: ^pa_context, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_set_default_sink :: proc(c: ^pa_context, name: cstring, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_set_default_source :: proc(c: ^pa_context, name: cstring, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_is_local :: proc(_c: ^pa_context) -> b32 ---
|
||||
context_set_name :: proc(c: ^pa_context, name: cstring, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_get_server :: proc(c: ^pa_context) -> cstring ---
|
||||
context_get_protocol_version :: proc(c: ^pa_context) -> u32 ---
|
||||
context_get_server_protocol_version :: proc(c: ^pa_context) -> u32 ---
|
||||
context_proplist_update :: proc(c: ^pa_context, mode: pa_update_mode, p: ^pa_proplist, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_proplist_remove :: proc(c: ^pa_context, keys: [^]cstring, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_get_index :: proc(s: ^pa_context) -> u32 ---
|
||||
context_rttime_new :: proc(c: ^pa_context, usec: pa_usec, cb: pa_time_event_cb, userdata: rawptr) -> ^pa_time_event ---
|
||||
context_rttime_restart :: proc(c: ^pa_context, e: ^pa_time_event, usec: pa_usec) ---
|
||||
context_get_tile_size :: proc(_c: ^pa_context, ss: ^pa_sample_spec) -> c.size_t ---
|
||||
context_load_cookie_from_file :: proc(_c: ^pa_context, cookie_file_path: cstring) -> c.int ---
|
||||
context_get_sink_info_list :: proc(c: ^pa_context, cb: pa_sink_info_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_get_source_info_list :: proc(c: ^pa_context, cb: pa_source_info_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
context_set_source_mute_by_name :: proc(c: ^pa_context, name: cstring, mute: b32, cb: pa_context_success_cb, userdata: rawptr) -> ^pa_operation ---
|
||||
|
||||
operation_ref :: proc(o: ^pa_operation) -> ^pa_operation ---
|
||||
operation_unref :: proc(o: ^pa_operation) ---
|
||||
operation_cancel :: proc(o: ^pa_operation) ---
|
||||
operation_get_state :: proc(o: ^pa_operation) -> pa_operation_state ---
|
||||
operation_set_state_callback :: proc(o: ^pa_operation, cb: pa_operation_notify_cb, userdata: rawptr) ---
|
||||
|
||||
stream_new :: proc(c: ^pa_context, name: cstring, ss: ^pa_sample_spec, _map: ^pa_channel_map) -> ^pa_stream ---
|
||||
stream_connect_record :: proc(s: ^pa_stream, dev: cstring, attr: ^pa_buffer_attr, flags: pa_stream_flags) -> c.int ---
|
||||
stream_disconnect :: proc(s: ^pa_stream) -> c.int ---
|
||||
stream_peek :: proc(p: ^pa_stream, data: ^rawptr, nbytes: ^c.size_t) -> c.int ---
|
||||
stream_readable_size :: proc(p: ^pa_stream) -> c.size_t ---
|
||||
stream_set_read_callback :: proc(p: ^pa_stream, cb: pa_stream_request_cb, userdata: rawptr) ---
|
||||
stream_drop :: proc(p: ^pa_stream) -> c.int ---
|
||||
stream_unref :: proc(p: ^pa_stream) ---
|
||||
}
|
||||
Reference in New Issue
Block a user