Files
odin-pulse/pulse-simple.odin
T
2025-07-19 13:18:27 +02:00

136 lines
2.7 KiB
Odin

package pulse
import "core:c"
foreign import pulse "system:pulse-simple"
PA_CHANNELS_MAX :: 32
pa_sample_format :: enum c.int {
INVALID = -1,
U8 = 0,
ALAW,
ULAW,
S16LE,
S16BE,
FLOAT32LE,
FLOAT32BE,
S32LE,
S32BE,
S24LE,
S24BE,
S24_32LE,
S24_32BE,
}
pa_stream_direction :: enum c.int {
NODIRECTION,
PLAYBACK,
RECORD,
UPLOAD,
}
pa_channel_position :: enum c.int {
INVALID = -1,
MONO = 0,
FRONT_LEFT,
FRONT_RIGHT,
FRONT_CENTER,
REAR_CENTER,
REAR_LEFT,
REAR_RIGHT,
LFE,
FRONT_LEFT_OF_CENTER,
FRONT_RIGHT_OF_CENTER,
SIDE_LEFT,
SIDE_RIGHT,
AUX0,
AUX1,
AUX2,
AUX3,
AUX4,
AUX5,
AUX6,
AUX7,
AUX8,
AUX9,
AUX10,
AUX11,
AUX12,
AUX13,
AUX14,
AUX15,
AUX16,
AUX17,
AUX18,
AUX19,
AUX20,
AUX21,
AUX22,
AUX23,
AUX24,
AUX25,
AUX26,
AUX27,
AUX28,
AUX29,
AUX30,
AUX31,
TOP_CENTER,
TOP_FRONT_LEFT,
TOP_FRONT_RIGHT,
TOP_FRONT_CENTER,
TOP_REAR_LEFT,
TOP_REAR_RIGHT,
TOP_REAR_CENTER,
}
pa_simple :: struct {}
pa_sample_spec :: struct {
format: pa_sample_format,
rate: u32,
channels: u8,
}
// A channel map which can be used to attach labels to specific channels of a stream
pa_channel_map :: struct {
channels: u8,
map_: [PA_CHANNELS_MAX]pa_channel_position,
}
pa_buffer_attr :: struct {
maxlength: u32,
tlength: u32,
prebuf: u32,
minreq: u32,
fregzie: u32,
}
pa_usec :: u64
@(link_prefix="pa_")
foreign pulse {
/* Create a new connection to the server.
Parameters
server Server name, or NULL for default
name A descriptive name for this client (application name, ...)
dir Open this stream for recording or playback?
dev Sink (resp. source) name, or NULL for default
stream_name A descriptive name for this stream (application name, song title, ...)
ss The sample type to use
map The channel map to use, or NULL for default
attr Buffering attributes, or NULL for default
error A pointer where the error code is stored when the routine returns NULL. It is OK to pass NULL here.
*/
simple_new :: proc(server: cstring, name: cstring, dir: pa_stream_direction, dev: cstring, stream_name: cstring, ss: ^pa_sample_spec, _map: ^pa_channel_map, attr: ^pa_buffer_attr, error: ^c.int) -> ^pa_simple ---
// Close and free the connection to the server.
//
// The connection object becomes invalid when this is called.
simple_free :: proc(s: ^pa_simple) ---
simple_write :: proc(s: ^pa_simple, data: rawptr, bytes: c.size_t, error: ^c.int) -> c.int ---
simple_drain :: proc(s: ^pa_simple, error: ^c.int) -> c.int ---
simple_read :: proc(s: ^pa_simple, data: rawptr, bytes: c.size_t, error: ^c.int) -> c.int ---
simple_get_latency :: proc(s: ^pa_simple, error: ^c.int) -> pa_usec ---
simple_flush :: proc(s: ^pa_simple, error: ^c.int) -> c.int ---
}