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) --- }