136 lines
2.7 KiB
Odin
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 ---
|
||
|
|
}
|