use core::cell::UnsafeCell;
use core::ffi::*;
use core::marker::{PhantomData, PhantomPinned};
use core::ptr::NonNull;
#[cfg(feature = "dispatch2")]
use dispatch2::*;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use crate::*;
#[cfg(feature = "AUComponent")]
pub const kAUParameterListener_AnyParameter: AudioUnitParameterID = 0xFFFFFFFF;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct AudioUnitEventType(pub u32);
impl AudioUnitEventType {
#[doc(alias = "kAudioUnitEvent_ParameterValueChange")]
pub const ParameterValueChange: Self = Self(0);
#[doc(alias = "kAudioUnitEvent_BeginParameterChangeGesture")]
pub const BeginParameterChangeGesture: Self = Self(1);
#[doc(alias = "kAudioUnitEvent_EndParameterChangeGesture")]
pub const EndParameterChangeGesture: Self = Self(2);
#[doc(alias = "kAudioUnitEvent_PropertyChange")]
pub const PropertyChange: Self = Self(3);
}
unsafe impl Encode for AudioUnitEventType {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for AudioUnitEventType {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Debug)]
pub struct AUListenerBase {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for AUListenerBase {
const ENCODING_REF: Encoding = Encoding::Pointer(&Encoding::Struct("AUListenerBase", &[]));
}
pub type AUParameterListenerRef = *mut AUListenerBase;
pub type AUEventListenerRef = AUParameterListenerRef;
#[cfg(all(
feature = "AUComponent",
feature = "AudioComponent",
feature = "block2"
))]
pub type AUParameterListenerBlock = *mut block2::DynBlock<
dyn Fn(*mut c_void, NonNull<AudioUnitParameter>, AudioUnitParameterValue),
>;
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub type AUParameterListenerProc = Option<
unsafe extern "C-unwind" fn(
*mut c_void,
*mut c_void,
NonNull<AudioUnitParameter>,
AudioUnitParameterValue,
),
>;
extern "C-unwind" {
#[cfg(all(
feature = "AUComponent",
feature = "AudioComponent",
feature = "block2",
feature = "dispatch2"
))]
pub fn AUListenerCreateWithDispatchQueue(
out_listener: NonNull<AUParameterListenerRef>,
in_notification_interval: f32,
in_dispatch_queue: &DispatchQueue,
in_block: AUParameterListenerBlock,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(
feature = "AUComponent",
feature = "AudioComponent",
feature = "objc2-core-foundation"
))]
pub fn AUListenerCreate(
in_proc: AUParameterListenerProc,
in_user_data: NonNull<c_void>,
in_run_loop: Option<&CFRunLoop>,
in_run_loop_mode: Option<&CFString>,
in_notification_interval: f32,
out_listener: NonNull<AUParameterListenerRef>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn AUListenerDispose(in_listener: AUParameterListenerRef) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUListenerAddParameter(
in_listener: AUParameterListenerRef,
in_object: *mut c_void,
in_parameter: NonNull<AudioUnitParameter>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUListenerRemoveParameter(
in_listener: AUParameterListenerRef,
in_object: *mut c_void,
in_parameter: NonNull<AudioUnitParameter>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUParameterSet(
in_sending_listener: AUParameterListenerRef,
in_sending_object: *mut c_void,
in_parameter: NonNull<AudioUnitParameter>,
in_value: AudioUnitParameterValue,
in_buffer_offset_in_frames: u32,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUParameterListenerNotify(
in_sending_listener: AUParameterListenerRef,
in_sending_object: *mut c_void,
in_parameter: NonNull<AudioUnitParameter>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUParameterValueFromLinear(
in_linear_value: f32,
in_parameter: NonNull<AudioUnitParameter>,
) -> AudioUnitParameterValue;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
pub fn AUParameterValueToLinear(
in_parameter_value: AudioUnitParameterValue,
in_parameter: NonNull<AudioUnitParameter>,
) -> f32;
}
#[cfg(all(feature = "AUComponent", feature = "AudioComponent"))]
#[inline]
pub unsafe extern "C-unwind" fn AUParameterFormatValue(
in_parameter_value: f64,
in_parameter: NonNull<AudioUnitParameter>,
in_text_buffer: NonNull<c_char>,
in_digits: u32,
) -> NonNull<c_char> {
extern "C-unwind" {
fn AUParameterFormatValue(
in_parameter_value: f64,
in_parameter: NonNull<AudioUnitParameter>,
in_text_buffer: NonNull<c_char>,
in_digits: u32,
) -> Option<NonNull<c_char>>;
}
let ret = unsafe {
AUParameterFormatValue(in_parameter_value, in_parameter, in_text_buffer, in_digits)
};
ret.expect("function was marked as returning non-null, but actually returned NULL")
}