rtaudio-sys 0.3.6

Raw bindings for RtAudio
Documentation
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

use ::std::os::raw::{c_char, c_int, c_long, c_uint, c_ulong, c_void};

#[doc = " \\typedef typedef unsigned long rtaudio_format_t;\n\\brief RtAudio data format type.\n\n- \\e RTAUDIO_FORMAT_SINT8:   8-bit signed integer.\n- \\e RTAUDIO_FORMAT_SINT16:  16-bit signed integer.\n- \\e RTAUDIO_FORMAT_SINT24:  24-bit signed integer.\n- \\e RTAUDIO_FORMAT_SINT32:  32-bit signed integer.\n- \\e RTAUDIO_FORMAT_FLOAT32: Normalized between plus/minus 1.0.\n- \\e RTAUDIO_FORMAT_FLOAT64: Normalized between plus/minus 1.0.\n\nSee \\ref RtAudioFormat."]
pub type rtaudio_format_t = c_ulong;
pub const RTAUDIO_FORMAT_SINT8: rtaudio_format_t = 1;
pub const RTAUDIO_FORMAT_SINT16: rtaudio_format_t = 2;
pub const RTAUDIO_FORMAT_SINT24: rtaudio_format_t = 4;
pub const RTAUDIO_FORMAT_SINT32: rtaudio_format_t = 8;
pub const RTAUDIO_FORMAT_FLOAT32: rtaudio_format_t = 16;
pub const RTAUDIO_FORMAT_FLOAT64: rtaudio_format_t = 32;

#[doc = " \\typedef typedef unsigned long rtaudio_stream_flags_t;\n\\brief RtAudio stream option flags.\n\nThe following flags can be OR'ed together to allow a client to\nmake changes to the default stream behavior:\n\n- \\e RTAUDIO_FLAGS_NONINTERLEAVED:   Use non-interleaved buffers (default = interleaved).\n- \\e RTAUDIO_FLAGS_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency.\n- \\e RTAUDIO_FLAGS_HOG_DEVICE:       Attempt grab device for exclusive use.\n- \\e RTAUDIO_FLAGS_ALSA_USE_DEFAULT: Use the \"default\" PCM device (ALSA only).\n- \\e RTAUDIO_FLAGS_JACK_DONT_CONNECT: Do not automatically connect ports (JACK only).\n\nSee \\ref RtAudioStreamFlags."]
pub type rtaudio_stream_flags_t = c_uint;
pub const RTAUDIO_FLAGS_NONINTERLEAVED: rtaudio_stream_flags_t = 1;
pub const RTAUDIO_FLAGS_MINIMIZE_LATENCY: rtaudio_stream_flags_t = 2;
pub const RTAUDIO_FLAGS_HOG_DEVICE: rtaudio_stream_flags_t = 4;
pub const RTAUDIO_FLAGS_SCHEDULE_REALTIME: rtaudio_stream_flags_t = 8;
pub const RTAUDIO_FLAGS_ALSA_USE_DEFAULT: rtaudio_stream_flags_t = 16;
pub const RTAUDIO_FLAGS_JACK_DONT_CONNECT: rtaudio_stream_flags_t = 32;

#[doc = " \\typedef typedef unsigned long rtaudio_stream_status_t;\n\\brief RtAudio stream status (over- or underflow) flags.\n\nNotification of a stream over- or underflow is indicated by a\nnon-zero stream \\c status argument in the RtAudioCallback function.\nThe stream status can be one of the following two options,\ndepending on whether the stream is open for output and/or input:\n\n- \\e RTAUDIO_STATUS_INPUT_OVERFLOW:   Input data was discarded because of an overflow condition at the driver.\n- \\e RTAUDIO_STATUS_OUTPUT_UNDERFLOW: The output buffer ran low, likely producing a break in the output sound.\n\nSee \\ref RtAudioStreamStatus."]
pub type rtaudio_stream_status_t = c_uint;
pub const RTAUDIO_STATUS_INPUT_OVERFLOW: rtaudio_stream_status_t = 1;
pub const RTAUDIO_STATUS_OUTPUT_UNDERFLOW: rtaudio_stream_status_t = 2;

pub const NUM_SAMPLE_RATES: usize = 16;
pub const MAX_NAME_LENGTH: usize = 512;

#[doc = "! RtAudio callback function prototype.\n*!\nAll RtAudio clients must create a function of this type to read\nand/or write data from/to the audio stream.  When the underlying\naudio system is ready for new input or output data, this function\nwill be invoked.\n\nSee \\ref RtAudioCallback.\n*/"]
pub type rtaudio_cb_t = ::std::option::Option<
    unsafe extern "C" fn(
        out: *mut c_void,
        in_: *mut c_void,
        nFrames: c_uint,
        stream_time: f64,
        status: rtaudio_stream_status_t,
        userdata: *mut c_void,
    ) -> c_int,
>;

#[doc = " \\brief Error codes for RtAudio.\n\nSee \\ref RtAudioError."]
pub type rtaudio_error_t = c_int;
#[doc = "< No error."]
pub const RTAUDIO_ERROR_NONE: rtaudio_error_t = 0;
#[doc = "< A non-critical error."]
pub const RTAUDIO_ERROR_WARNING: rtaudio_error_t = 1;
#[doc = "< An unspecified error type."]
pub const RTAUDIO_ERROR_UNKNOWN: rtaudio_error_t = 2;
#[doc = "< No devices found on system."]
pub const RTAUDIO_ERROR_NO_DEVICES_FOUND: rtaudio_error_t = 3;
#[doc = "< An invalid device ID was specified."]
pub const RTAUDIO_ERROR_INVALID_DEVICE: rtaudio_error_t = 4;
#[doc = "< A device in use was disconnected."]
pub const RTAUDIO_ERROR_DEVICE_DISCONNECT: rtaudio_error_t = 5;
#[doc = "< An error occurred during memory allocation."]
pub const RTAUDIO_ERROR_MEMORY_ERROR: rtaudio_error_t = 6;
#[doc = "< An invalid parameter was specified to a function."]
pub const RTAUDIO_ERROR_INVALID_PARAMETER: rtaudio_error_t = 7;
#[doc = "< The function was called incorrectly."]
pub const RTAUDIO_ERROR_INVALID_USE: rtaudio_error_t = 8;
#[doc = "< A system driver error occurred."]
pub const RTAUDIO_ERROR_DRIVER_ERROR: rtaudio_error_t = 9;
#[doc = "< A system error occurred."]
pub const RTAUDIO_ERROR_SYSTEM_ERROR: rtaudio_error_t = 10;
#[doc = "< A thread error occurred."]
pub const RTAUDIO_ERROR_THREAD_ERROR: rtaudio_error_t = 11;

#[doc = "! RtAudio error callback function prototype.\n*!\n\\param err Type of error.\n\\param msg Error description.\n\nSee \\ref RtAudioErrorCallback.\n*/"]
pub type rtaudio_error_cb_t =
    ::std::option::Option<unsafe extern "C" fn(err: rtaudio_error_t, msg: *const c_char)>;

#[doc = "! Audio API specifier.  See \\ref RtAudio::Api."]
pub type rtaudio_api_t = c_int;
#[doc = "< Search for a working compiled API."]
pub const RTAUDIO_API_UNSPECIFIED: rtaudio_api_t = 0;
#[doc = "< Macintosh OS-X Core Audio API."]
pub const RTAUDIO_API_MACOSX_CORE: rtaudio_api_t = 1;
#[doc = "< The Advanced Linux Sound Architecture API."]
pub const RTAUDIO_API_LINUX_ALSA: rtaudio_api_t = 2;
#[doc = "< The Jack Low-Latency Audio Server API."]
pub const RTAUDIO_API_UNIX_JACK: rtaudio_api_t = 3;
#[doc = "< The Linux PulseAudio API."]
pub const RTAUDIO_API_LINUX_PULSE: rtaudio_api_t = 4;
#[doc = "< The Linux Open Sound System API."]
pub const RTAUDIO_API_LINUX_OSS: rtaudio_api_t = 5;
#[doc = "< The Steinberg Audio Stream I/O API."]
pub const RTAUDIO_API_WINDOWS_ASIO: rtaudio_api_t = 6;
#[doc = "< The Microsoft WASAPI API."]
pub const RTAUDIO_API_WINDOWS_WASAPI: rtaudio_api_t = 7;
#[doc = "< The Microsoft DirectSound API."]
pub const RTAUDIO_API_WINDOWS_DS: rtaudio_api_t = 8;
#[doc = "< A compilable but non-functional API."]
pub const RTAUDIO_API_DUMMY: rtaudio_api_t = 9;
#[doc = "< Number of values in this enum."]
pub const RTAUDIO_API_NUM: rtaudio_api_t = 10;

#[doc = "! The public device information structure for returning queried values.\n! See \\ref RtAudio::DeviceInfo."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct rtaudio_device_info {
    pub id: c_uint,
    pub output_channels: c_uint,
    pub input_channels: c_uint,
    pub duplex_channels: c_uint,
    pub is_default_output: c_int,
    pub is_default_input: c_int,
    pub native_formats: rtaudio_format_t,
    pub preferred_sample_rate: c_uint,
    pub sample_rates: [c_uint; NUM_SAMPLE_RATES],
    pub name: [c_char; MAX_NAME_LENGTH],
}
#[doc = "! The public device information structure for returning queried values.\n! See \\ref RtAudio::DeviceInfo."]
pub type rtaudio_device_info_t = rtaudio_device_info;

#[doc = "! The structure for specifying input or output stream parameters.\n! See \\ref RtAudio::StreamParameters."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct rtaudio_stream_parameters {
    pub device_id: c_uint,
    pub num_channels: c_uint,
    pub first_channel: c_uint,
}
#[doc = "! The structure for specifying input or output stream parameters.\n! See \\ref RtAudio::StreamParameters."]
pub type rtaudio_stream_parameters_t = rtaudio_stream_parameters;

#[doc = "! The structure for specifying stream options.\n! See \\ref RtAudio::StreamOptions."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct rtaudio_stream_options {
    pub flags: rtaudio_stream_flags_t,
    pub num_buffers: c_uint,
    pub priority: c_int,
    pub name: [c_char; MAX_NAME_LENGTH],
}
#[doc = "! The structure for specifying stream options.\n! See \\ref RtAudio::StreamOptions."]
pub type rtaudio_stream_options_t = rtaudio_stream_options;

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct rtaudio {
    _unused: [u8; 0],
}
pub type rtaudio_t = *mut rtaudio;

extern "C" {
    #[doc = "! Determine the current RtAudio version.  See \\ref RtAudio::getVersion()."]
    pub fn rtaudio_version() -> *const c_char;

    #[doc = "! Determine the number of available compiled audio APIs, the length\n! of the array returned by rtaudio_compiled_api().  See \\ref\n! RtAudio::getCompiledApi()."]
    pub fn rtaudio_get_num_compiled_apis() -> c_uint;

    #[doc = "! Return an array of rtaudio_api_t compiled into this instance of\n! RtAudio.  This array is static (do not free it) and has the length\n! returned by rtaudio_get_num_compiled_apis().  See \\ref\n! RtAudio::getCompiledApi()."]
    pub fn rtaudio_compiled_api() -> *const rtaudio_api_t;

    #[doc = "! Return the name of a specified rtaudio_api_t.  This string can be\n! used to look up an API by rtaudio_compiled_api_by_name().  See\n! \\ref RtAudio::getApiName()."]
    pub fn rtaudio_api_name(api: rtaudio_api_t) -> *const c_char;

    #[doc = "! Return the display name of a specified rtaudio_api_t.  See \\ref\n! RtAudio::getApiDisplayName()."]
    pub fn rtaudio_api_display_name(api: rtaudio_api_t) -> *const c_char;

    #[doc = "! Return the rtaudio_api_t having the given name.  See \\ref\n! RtAudio::getCompiledApiByName()."]
    pub fn rtaudio_compiled_api_by_name(name: *const c_char) -> rtaudio_api_t;

    pub fn rtaudio_error(audio: rtaudio_t) -> *const c_char;

    pub fn rtaudio_error_type(audio: rtaudio_t) -> rtaudio_error_t;

    #[doc = "! Create an instance of struct rtaudio."]
    pub fn rtaudio_create(api: rtaudio_api_t) -> rtaudio_t;

    #[doc = "! Free an instance of struct rtaudio."]
    pub fn rtaudio_destroy(audio: rtaudio_t);

    #[doc = "! Returns the audio API specifier for the current instance of\n! RtAudio.  See RtAudio::getCurrentApi()."]
    pub fn rtaudio_current_api(audio: rtaudio_t) -> rtaudio_api_t;

    #[doc = "! Queries for the number of audio devices available.  See \\ref\n! RtAudio::getDeviceCount()."]
    pub fn rtaudio_device_count(audio: rtaudio_t) -> c_int;

    #[doc = "! Returns the audio device ID corresponding to a given index\n! value (valid index values are between 0 and rtaudio_device_count()-1).\n! Note that a return value of 0 is invalid, which will occur if the\n! index value is out of bounds or no devices are found. See \\ref\n! RtAudio::getDeviceIds()."]
    pub fn rtaudio_get_device_id(audio: rtaudio_t, i: c_int) -> c_uint;

    #[doc = "! Return a struct rtaudio_device_info for a specified device ID.\n! See \\ref RtAudio::getDeviceInfo()."]
    pub fn rtaudio_get_device_info(audio: rtaudio_t, id: c_uint) -> rtaudio_device_info_t;

    #[doc = "! Returns the device id of the default output device.  See \\ref\n! RtAudio::getDefaultOutputDevice()."]
    pub fn rtaudio_get_default_output_device(audio: rtaudio_t) -> c_uint;

    #[doc = "! Returns the device id of the default input device.  See \\ref\n! RtAudio::getDefaultInputDevice()."]
    pub fn rtaudio_get_default_input_device(audio: rtaudio_t) -> c_uint;

    #[doc = "! Opens a stream with the specified parameters.  See \\ref RtAudio::openStream().\n! \\return an \\ref rtaudio_error."]
    pub fn rtaudio_open_stream(
        audio: rtaudio_t,
        output_params: *mut rtaudio_stream_parameters_t,
        input_params: *mut rtaudio_stream_parameters_t,
        format: rtaudio_format_t,
        sample_rate: c_uint,
        buffer_frames: *mut c_uint,
        cb: rtaudio_cb_t,
        userdata: *mut c_void,
        options: *mut rtaudio_stream_options_t,
        errcb: rtaudio_error_cb_t,
    ) -> rtaudio_error_t;

    #[doc = "! Closes a stream and frees any associated stream memory.  See \\ref RtAudio::closeStream()."]
    pub fn rtaudio_close_stream(audio: rtaudio_t);

    #[doc = "! Starts a stream.  See \\ref RtAudio::startStream()."]
    pub fn rtaudio_start_stream(audio: rtaudio_t) -> rtaudio_error_t;

    #[doc = "! Stop a stream, allowing any samples remaining in the output queue\n! to be played.  See \\ref RtAudio::stopStream()."]
    pub fn rtaudio_stop_stream(audio: rtaudio_t) -> rtaudio_error_t;

    #[doc = "! Stop a stream, discarding any samples remaining in the\n! input/output queue.  See \\ref RtAudio::abortStream()."]
    pub fn rtaudio_abort_stream(audio: rtaudio_t) -> rtaudio_error_t;

    #[doc = "! Returns 1 if a stream is open and false if not.  See \\ref RtAudio::isStreamOpen()."]
    pub fn rtaudio_is_stream_open(audio: rtaudio_t) -> c_int;

    #[doc = "! Returns 1 if a stream is running and false if it is stopped or not\n! open.  See \\ref RtAudio::isStreamRunning()."]
    pub fn rtaudio_is_stream_running(audio: rtaudio_t) -> c_int;

    #[doc = "! Returns the number of elapsed seconds since the stream was\n! started.  See \\ref RtAudio::getStreamTime()."]
    pub fn rtaudio_get_stream_time(audio: rtaudio_t) -> f64;

    #[doc = "! Set the stream time to a time in seconds greater than or equal to\n! 0.0.  See \\ref RtAudio::setStreamTime()."]
    pub fn rtaudio_set_stream_time(audio: rtaudio_t, time: f64);

    #[doc = "! Returns the internal stream latency in sample frames.  See \\ref\n! RtAudio::getStreamLatency()."]
    pub fn rtaudio_get_stream_latency(audio: rtaudio_t) -> c_long;

    #[doc = "! Returns actual sample rate in use by the stream.  See \\ref\n! RtAudio::getStreamSampleRate()."]
    pub fn rtaudio_get_stream_sample_rate(audio: rtaudio_t) -> c_uint;

    #[doc = "! Specify whether warning messages should be printed to stderr.  See\n! \\ref RtAudio::showWarnings()."]
    pub fn rtaudio_show_warnings(audio: rtaudio_t, show: c_int);
}