#![allow(dead_code)]
use std::os::raw::{c_char, c_int};
#[repr(C)]
pub struct RackAUScanner {
_private: [u8; 0],
}
#[repr(C)]
pub struct RackAUPlugin {
_private: [u8; 0],
}
#[repr(C)]
pub struct RackAUGui {
_private: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RackAUPluginType {
Effect = 0,
Instrument = 1,
Mixer = 2,
FormatConverter = 3,
Other = 4,
}
#[repr(C)]
#[derive(Clone)]
pub struct RackAUPluginInfo {
pub name: [c_char; 256],
pub manufacturer: [c_char; 256],
pub path: [c_char; 1024],
pub unique_id: [c_char; 64],
pub version: u32,
pub plugin_type: RackAUPluginType,
}
pub const RACK_AU_OK: c_int = 0;
pub const RACK_AU_ERROR_GENERIC: c_int = -1;
pub const RACK_AU_ERROR_NOT_FOUND: c_int = -2;
pub const RACK_AU_ERROR_INVALID_PARAM: c_int = -3;
pub const RACK_AU_ERROR_NOT_INITIALIZED: c_int = -4;
pub const RACK_AU_ERROR_AUDIO_UNIT: c_int = -1000;
extern "C" {
pub fn rack_au_scanner_new() -> *mut RackAUScanner;
pub fn rack_au_scanner_free(scanner: *mut RackAUScanner);
pub fn rack_au_scanner_scan(
scanner: *mut RackAUScanner,
plugins: *mut RackAUPluginInfo,
max_plugins: usize,
) -> c_int;
pub fn rack_au_plugin_new(unique_id: *const c_char) -> *mut RackAUPlugin;
pub fn rack_au_plugin_free(plugin: *mut RackAUPlugin);
pub fn rack_au_plugin_initialize(
plugin: *mut RackAUPlugin,
sample_rate: f64,
max_block_size: u32,
) -> c_int;
pub fn rack_au_plugin_is_initialized(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_reset(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_get_input_channels(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_get_output_channels(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_process(
plugin: *mut RackAUPlugin,
inputs: *const *const f32,
num_input_channels: u32,
outputs: *const *mut f32,
num_output_channels: u32,
frames: u32,
) -> c_int;
pub fn rack_au_plugin_parameter_count(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_get_parameter(
plugin: *mut RackAUPlugin,
index: u32,
value: *mut f32,
) -> c_int;
pub fn rack_au_plugin_set_parameter(
plugin: *mut RackAUPlugin,
index: u32,
value: f32,
) -> c_int;
pub fn rack_au_plugin_parameter_info(
plugin: *mut RackAUPlugin,
index: u32,
name: *mut c_char,
name_size: usize,
min: *mut f32,
max: *mut f32,
default_value: *mut f32,
unit: *mut c_char,
unit_size: usize,
) -> c_int;
pub fn rack_au_plugin_get_preset_count(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_get_preset_info(
plugin: *mut RackAUPlugin,
index: u32,
name: *mut c_char,
name_size: usize,
preset_number: *mut i32,
) -> c_int;
pub fn rack_au_plugin_load_preset(plugin: *mut RackAUPlugin, preset_number: i32) -> c_int;
pub fn rack_au_plugin_get_state_size(plugin: *mut RackAUPlugin) -> c_int;
pub fn rack_au_plugin_get_state(
plugin: *mut RackAUPlugin,
data: *mut u8,
size: *mut usize,
) -> c_int;
pub fn rack_au_plugin_set_state(
plugin: *mut RackAUPlugin,
data: *const u8,
size: usize,
) -> c_int;
pub fn rack_au_plugin_send_midi(
plugin: *mut RackAUPlugin,
events: *const RackAUMidiEvent,
event_count: u32,
) -> c_int;
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RackAUMidiEventType {
NoteOn = 0x90,
NoteOff = 0x80,
PolyphonicAftertouch = 0xA0,
ControlChange = 0xB0,
ProgramChange = 0xC0,
ChannelAftertouch = 0xD0,
PitchBend = 0xE0,
SystemExclusive = 0xF0,
TimeCode = 0xF1,
SongPosition = 0xF2,
SongSelect = 0xF3,
TuneRequest = 0xF6,
TimingClock = 0xF8,
Start = 0xFA,
Continue = 0xFB,
Stop = 0xFC,
ActiveSensing = 0xFE,
SystemReset = 0xFF,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct RackAUMidiEvent {
pub sample_offset: u32,
pub status: u8,
pub data1: u8,
pub data2: u8,
pub channel: u8,
}
pub type RackAUGuiCallback = extern "C" fn(user_data: *mut std::ffi::c_void, gui: *mut RackAUGui, error_code: c_int);
extern "C" {
pub fn rack_au_gui_create_async(
plugin: *mut RackAUPlugin,
callback: RackAUGuiCallback,
user_data: *mut std::ffi::c_void,
);
pub fn rack_au_gui_destroy(gui: *mut RackAUGui);
pub fn rack_au_gui_get_view(gui: *mut RackAUGui) -> *mut std::ffi::c_void;
pub fn rack_au_gui_get_size(
gui: *mut RackAUGui,
width: *mut f32,
height: *mut f32,
) -> c_int;
pub fn rack_au_gui_show_window(
gui: *mut RackAUGui,
title: *const c_char,
) -> c_int;
pub fn rack_au_gui_hide_window(gui: *mut RackAUGui) -> c_int;
}