use core::cell::UnsafeCell;
use core::ffi::*;
use core::marker::{PhantomData, PhantomPinned};
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
#[cfg(feature = "objc2-core-midi")]
use objc2_core_midi::*;
use crate::*;
pub const kMusicEventType_NULL: u32 = 0;
pub const kMusicEventType_ExtendedNote: u32 = 1;
pub const kMusicEventType_ExtendedTempo: u32 = 3;
pub const kMusicEventType_User: u32 = 4;
pub const kMusicEventType_Meta: u32 = 5;
pub const kMusicEventType_MIDINoteMessage: u32 = 6;
pub const kMusicEventType_MIDIChannelMessage: u32 = 7;
pub const kMusicEventType_MIDIRawData: u32 = 8;
pub const kMusicEventType_Parameter: u32 = 9;
pub const kMusicEventType_AUPreset: u32 = 10;
pub type MusicEventType = u32;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MusicSequenceLoadFlags(pub u32);
bitflags::bitflags! {
impl MusicSequenceLoadFlags: u32 {
#[doc(alias = "kMusicSequenceLoadSMF_PreserveTracks")]
const SMF_PreserveTracks = 0;
#[doc(alias = "kMusicSequenceLoadSMF_ChannelsToTracks")]
const SMF_ChannelsToTracks = 1<<0;
}
}
unsafe impl Encode for MusicSequenceLoadFlags {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for MusicSequenceLoadFlags {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MusicSequenceType(pub u32);
impl MusicSequenceType {
#[doc(alias = "kMusicSequenceType_Beats")]
pub const Beats: Self = Self(0x62656174);
#[doc(alias = "kMusicSequenceType_Seconds")]
pub const Seconds: Self = Self(0x73656373);
#[doc(alias = "kMusicSequenceType_Samples")]
pub const Samples: Self = Self(0x73616d70);
}
unsafe impl Encode for MusicSequenceType {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for MusicSequenceType {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MusicSequenceFileTypeID(pub u32);
impl MusicSequenceFileTypeID {
#[doc(alias = "kMusicSequenceFile_AnyType")]
pub const AnyType: Self = Self(0);
#[doc(alias = "kMusicSequenceFile_MIDIType")]
pub const MIDIType: Self = Self(0x6d696469);
#[doc(alias = "kMusicSequenceFile_iMelodyType")]
pub const iMelodyType: Self = Self(0x696d656c);
}
unsafe impl Encode for MusicSequenceFileTypeID {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for MusicSequenceFileTypeID {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MusicSequenceFileFlags(pub u32);
bitflags::bitflags! {
impl MusicSequenceFileFlags: u32 {
#[doc(alias = "kMusicSequenceFileFlags_Default")]
const Default = 0;
#[doc(alias = "kMusicSequenceFileFlags_EraseFile")]
const EraseFile = 1;
}
}
unsafe impl Encode for MusicSequenceFileFlags {
const ENCODING: Encoding = u32::ENCODING;
}
unsafe impl RefEncode for MusicSequenceFileFlags {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
pub type MusicTimeStamp = f64;
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MIDINoteMessage {
pub channel: u8,
pub note: u8,
pub velocity: u8,
pub releaseVelocity: u8,
pub duration: f32,
}
unsafe impl Encode for MIDINoteMessage {
const ENCODING: Encoding = Encoding::Struct(
"MIDINoteMessage",
&[
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
<f32>::ENCODING,
],
);
}
unsafe impl RefEncode for MIDINoteMessage {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MIDIChannelMessage {
pub status: u8,
pub data1: u8,
pub data2: u8,
pub reserved: u8,
}
unsafe impl Encode for MIDIChannelMessage {
const ENCODING: Encoding = Encoding::Struct(
"MIDIChannelMessage",
&[
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
],
);
}
unsafe impl RefEncode for MIDIChannelMessage {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MIDIRawData {
pub length: u32,
pub data: [u8; 1],
}
unsafe impl Encode for MIDIRawData {
const ENCODING: Encoding =
Encoding::Struct("MIDIRawData", &[<u32>::ENCODING, <[u8; 1]>::ENCODING]);
}
unsafe impl RefEncode for MIDIRawData {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MIDIMetaEvent {
pub metaEventType: u8,
pub unused1: u8,
pub unused2: u8,
pub unused3: u8,
pub dataLength: u32,
pub data: [u8; 1],
}
unsafe impl Encode for MIDIMetaEvent {
const ENCODING: Encoding = Encoding::Struct(
"MIDIMetaEvent",
&[
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
<u8>::ENCODING,
<u32>::ENCODING,
<[u8; 1]>::ENCODING,
],
);
}
unsafe impl RefEncode for MIDIMetaEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MusicEventUserData {
pub length: u32,
pub data: [u8; 1],
}
unsafe impl Encode for MusicEventUserData {
const ENCODING: Encoding = Encoding::Struct(
"MusicEventUserData",
&[<u32>::ENCODING, <[u8; 1]>::ENCODING],
);
}
unsafe impl RefEncode for MusicEventUserData {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ExtendedNoteOnEvent {
pub instrumentID: MusicDeviceInstrumentID,
pub groupID: MusicDeviceGroupID,
pub duration: f32,
pub extendedParams: MusicDeviceNoteParams,
}
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
unsafe impl Encode for ExtendedNoteOnEvent {
const ENCODING: Encoding = Encoding::Struct(
"ExtendedNoteOnEvent",
&[
<MusicDeviceInstrumentID>::ENCODING,
<MusicDeviceGroupID>::ENCODING,
<f32>::ENCODING,
<MusicDeviceNoteParams>::ENCODING,
],
);
}
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
unsafe impl RefEncode for ExtendedNoteOnEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "AUComponent")]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ParameterEvent {
pub parameterID: AudioUnitParameterID,
pub scope: AudioUnitScope,
pub element: AudioUnitElement,
pub value: AudioUnitParameterValue,
}
#[cfg(feature = "AUComponent")]
unsafe impl Encode for ParameterEvent {
const ENCODING: Encoding = Encoding::Struct(
"ParameterEvent",
&[
<AudioUnitParameterID>::ENCODING,
<AudioUnitScope>::ENCODING,
<AudioUnitElement>::ENCODING,
<AudioUnitParameterValue>::ENCODING,
],
);
}
#[cfg(feature = "AUComponent")]
unsafe impl RefEncode for ParameterEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ExtendedTempoEvent {
pub bpm: f64,
}
unsafe impl Encode for ExtendedTempoEvent {
const ENCODING: Encoding = Encoding::Struct("ExtendedTempoEvent", &[<f64>::ENCODING]);
}
unsafe impl RefEncode for ExtendedTempoEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(all(feature = "AUComponent", feature = "objc2-core-foundation"))]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct AUPresetEvent {
pub scope: AudioUnitScope,
pub element: AudioUnitElement,
pub preset: NonNull<CFPropertyList>,
}
#[cfg(all(feature = "AUComponent", feature = "objc2-core-foundation"))]
unsafe impl Encode for AUPresetEvent {
const ENCODING: Encoding = Encoding::Struct(
"AUPresetEvent",
&[
<AudioUnitScope>::ENCODING,
<AudioUnitElement>::ENCODING,
<NonNull<CFPropertyList>>::ENCODING,
],
);
}
#[cfg(all(feature = "AUComponent", feature = "objc2-core-foundation"))]
unsafe impl RefEncode for AUPresetEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct CABarBeatTime {
pub bar: i32,
pub beat: u16,
pub subbeat: u16,
pub subbeatDivisor: u16,
pub reserved: u16,
}
unsafe impl Encode for CABarBeatTime {
const ENCODING: Encoding = Encoding::Struct(
"CABarBeatTime",
&[
<i32>::ENCODING,
<u16>::ENCODING,
<u16>::ENCODING,
<u16>::ENCODING,
<u16>::ENCODING,
],
);
}
unsafe impl RefEncode for CABarBeatTime {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueMusicPlayer {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueMusicPlayer {
const ENCODING_REF: Encoding = Encoding::Pointer(&Encoding::Struct("OpaqueMusicPlayer", &[]));
}
pub type MusicPlayer = *mut OpaqueMusicPlayer;
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueMusicSequence {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueMusicSequence {
const ENCODING_REF: Encoding = Encoding::Pointer(&Encoding::Struct("OpaqueMusicSequence", &[]));
}
pub type MusicSequence = *mut OpaqueMusicSequence;
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueMusicTrack {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueMusicTrack {
const ENCODING_REF: Encoding = Encoding::Pointer(&Encoding::Struct("OpaqueMusicTrack", &[]));
}
pub type MusicTrack = *mut OpaqueMusicTrack;
#[repr(C)]
#[derive(Debug)]
pub struct OpaqueMusicEventIterator {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
unsafe impl RefEncode for OpaqueMusicEventIterator {
const ENCODING_REF: Encoding =
Encoding::Pointer(&Encoding::Struct("OpaqueMusicEventIterator", &[]));
}
pub type MusicEventIterator = *mut OpaqueMusicEventIterator;
pub type MusicSequenceUserCallback = Option<
unsafe extern "C-unwind" fn(
*mut c_void,
MusicSequence,
MusicTrack,
MusicTimeStamp,
NonNull<MusicEventUserData>,
MusicTimeStamp,
MusicTimeStamp,
),
>;
pub const kAudioToolboxErr_InvalidSequenceType: OSStatus = -10846;
pub const kAudioToolboxErr_TrackIndexError: OSStatus = -10859;
pub const kAudioToolboxErr_TrackNotFound: OSStatus = -10858;
pub const kAudioToolboxErr_EndOfTrack: OSStatus = -10857;
pub const kAudioToolboxErr_StartOfTrack: OSStatus = -10856;
pub const kAudioToolboxErr_IllegalTrackDestination: OSStatus = -10855;
pub const kAudioToolboxErr_NoSequence: OSStatus = -10854;
pub const kAudioToolboxErr_InvalidEventType: OSStatus = -10853;
pub const kAudioToolboxErr_InvalidPlayerState: OSStatus = -10852;
pub const kAudioToolboxErr_CannotDoInCurrentContext: OSStatus = -10863;
pub const kAudioToolboxError_NoTrackDestination: OSStatus = -66720;
pub const kSequenceTrackProperty_LoopInfo: u32 = 0;
pub const kSequenceTrackProperty_OffsetTime: u32 = 1;
pub const kSequenceTrackProperty_MuteStatus: u32 = 2;
pub const kSequenceTrackProperty_SoloStatus: u32 = 3;
pub const kSequenceTrackProperty_AutomatedParameters: u32 = 4;
pub const kSequenceTrackProperty_TrackLength: u32 = 5;
pub const kSequenceTrackProperty_TimeResolution: u32 = 6;
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct MusicTrackLoopInfo {
pub loopDuration: MusicTimeStamp,
pub numberOfLoops: i32,
}
unsafe impl Encode for MusicTrackLoopInfo {
const ENCODING: Encoding = Encoding::Struct(
"MusicTrackLoopInfo",
&[<MusicTimeStamp>::ENCODING, <i32>::ENCODING],
);
}
unsafe impl RefEncode for MusicTrackLoopInfo {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern "C-unwind" {
pub fn NewMusicPlayer(out_player: NonNull<MusicPlayer>) -> OSStatus;
}
extern "C-unwind" {
pub fn DisposeMusicPlayer(in_player: MusicPlayer) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerSetSequence(in_player: MusicPlayer, in_sequence: MusicSequence) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerGetSequence(
in_player: MusicPlayer,
out_sequence: NonNull<MusicSequence>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerSetTime(in_player: MusicPlayer, in_time: MusicTimeStamp) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerGetTime(
in_player: MusicPlayer,
out_time: NonNull<MusicTimeStamp>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerGetHostTimeForBeats(
in_player: MusicPlayer,
in_beats: MusicTimeStamp,
out_host_time: NonNull<u64>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerGetBeatsForHostTime(
in_player: MusicPlayer,
in_host_time: u64,
out_beats: NonNull<MusicTimeStamp>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerPreroll(in_player: MusicPlayer) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerStart(in_player: MusicPlayer) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerStop(in_player: MusicPlayer) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerIsPlaying(
in_player: MusicPlayer,
out_is_playing: NonNull<Boolean>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerSetPlayRateScalar(in_player: MusicPlayer, in_scale_rate: f64) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicPlayerGetPlayRateScalar(
in_player: MusicPlayer,
out_scale_rate: NonNull<f64>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn NewMusicSequence(out_sequence: NonNull<MusicSequence>) -> OSStatus;
}
extern "C-unwind" {
pub fn DisposeMusicSequence(in_sequence: MusicSequence) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceNewTrack(
in_sequence: MusicSequence,
out_track: NonNull<MusicTrack>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceDisposeTrack(in_sequence: MusicSequence, in_track: MusicTrack) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetTrackCount(
in_sequence: MusicSequence,
out_number_of_tracks: NonNull<u32>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetIndTrack(
in_sequence: MusicSequence,
in_track_index: u32,
out_track: NonNull<MusicTrack>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetTrackIndex(
in_sequence: MusicSequence,
in_track: MusicTrack,
out_track_index: NonNull<u32>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetTempoTrack(
in_sequence: MusicSequence,
out_track: NonNull<MusicTrack>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "AUGraph")]
pub fn MusicSequenceSetAUGraph(in_sequence: MusicSequence, in_graph: AUGraph) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "AUGraph")]
pub fn MusicSequenceGetAUGraph(
in_sequence: MusicSequence,
out_graph: NonNull<AUGraph>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-midi")]
pub fn MusicSequenceSetMIDIEndpoint(
in_sequence: MusicSequence,
in_endpoint: MIDIEndpointRef,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceSetSequenceType(
in_sequence: MusicSequence,
in_type: MusicSequenceType,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetSequenceType(
in_sequence: MusicSequence,
out_type: NonNull<MusicSequenceType>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn MusicSequenceFileLoad(
in_sequence: MusicSequence,
in_file_ref: &CFURL,
in_file_type_hint: MusicSequenceFileTypeID,
in_flags: MusicSequenceLoadFlags,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn MusicSequenceFileLoadData(
in_sequence: MusicSequence,
in_data: &CFData,
in_file_type_hint: MusicSequenceFileTypeID,
in_flags: MusicSequenceLoadFlags,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn MusicSequenceFileCreate(
in_sequence: MusicSequence,
in_file_ref: &CFURL,
in_file_type: MusicSequenceFileTypeID,
in_flags: MusicSequenceFileFlags,
in_resolution: i16,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
pub fn MusicSequenceFileCreateData(
in_sequence: MusicSequence,
in_file_type: MusicSequenceFileTypeID,
in_flags: MusicSequenceFileFlags,
in_resolution: i16,
out_data: NonNull<*const CFData>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceReverse(in_sequence: MusicSequence) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetSecondsForBeats(
in_sequence: MusicSequence,
in_beats: MusicTimeStamp,
out_seconds: NonNull<f64>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceGetBeatsForSeconds(
in_sequence: MusicSequence,
in_seconds: f64,
out_beats: NonNull<MusicTimeStamp>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceSetUserCallback(
in_sequence: MusicSequence,
in_callback: MusicSequenceUserCallback,
in_client_data: *mut c_void,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceBeatsToBarBeatTime(
in_sequence: MusicSequence,
in_beats: MusicTimeStamp,
in_subbeat_divisor: u32,
out_bar_beat_time: NonNull<CABarBeatTime>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicSequenceBarBeatTimeToBeats(
in_sequence: MusicSequence,
in_bar_beat_time: NonNull<CABarBeatTime>,
out_beats: NonNull<MusicTimeStamp>,
) -> OSStatus;
}
#[cfg(feature = "objc2-core-foundation")]
#[inline]
pub unsafe extern "C-unwind" fn MusicSequenceGetInfoDictionary(
in_sequence: MusicSequence,
) -> CFRetained<CFDictionary> {
extern "C-unwind" {
fn MusicSequenceGetInfoDictionary(
in_sequence: MusicSequence,
) -> Option<NonNull<CFDictionary>>;
}
let ret = unsafe { MusicSequenceGetInfoDictionary(in_sequence) };
let ret = ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { CFRetained::retain(ret) }
}
extern "C-unwind" {
pub fn MusicTrackGetSequence(
in_track: MusicTrack,
out_sequence: NonNull<MusicSequence>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "AUGraph")]
pub fn MusicTrackSetDestNode(in_track: MusicTrack, in_node: AUNode) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-midi")]
pub fn MusicTrackSetDestMIDIEndpoint(
in_track: MusicTrack,
in_endpoint: MIDIEndpointRef,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "AUGraph")]
pub fn MusicTrackGetDestNode(in_track: MusicTrack, out_node: NonNull<AUNode>) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-midi")]
pub fn MusicTrackGetDestMIDIEndpoint(
in_track: MusicTrack,
out_endpoint: NonNull<MIDIEndpointRef>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackSetProperty(
in_track: MusicTrack,
in_property_id: u32,
in_data: NonNull<c_void>,
in_length: u32,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackGetProperty(
in_track: MusicTrack,
in_property_id: u32,
out_data: NonNull<c_void>,
io_length: NonNull<u32>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackMoveEvents(
in_track: MusicTrack,
in_start_time: MusicTimeStamp,
in_end_time: MusicTimeStamp,
in_move_time: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackClear(
in_track: MusicTrack,
in_start_time: MusicTimeStamp,
in_end_time: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackCut(
in_track: MusicTrack,
in_start_time: MusicTimeStamp,
in_end_time: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackCopyInsert(
in_source_track: MusicTrack,
in_source_start_time: MusicTimeStamp,
in_source_end_time: MusicTimeStamp,
in_dest_track: MusicTrack,
in_dest_insert_time: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackMerge(
in_source_track: MusicTrack,
in_source_start_time: MusicTimeStamp,
in_source_end_time: MusicTimeStamp,
in_dest_track: MusicTrack,
in_dest_insert_time: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewMIDINoteEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_message: NonNull<MIDINoteMessage>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewMIDIChannelEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_message: NonNull<MIDIChannelMessage>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewMIDIRawDataEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_raw_data: NonNull<MIDIRawData>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
pub fn MusicTrackNewExtendedNoteEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_info: NonNull<ExtendedNoteOnEvent>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "AUComponent")]
pub fn MusicTrackNewParameterEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_info: NonNull<ParameterEvent>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewExtendedTempoEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_bpm: f64,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewMetaEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_meta_event: NonNull<MIDIMetaEvent>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicTrackNewUserEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_user_data: NonNull<MusicEventUserData>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "objc2-core-foundation"))]
pub fn MusicTrackNewAUPresetEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_preset_event: NonNull<AUPresetEvent>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn NewMusicEventIterator(
in_track: MusicTrack,
out_iterator: NonNull<MusicEventIterator>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn DisposeMusicEventIterator(in_iterator: MusicEventIterator) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorSeek(
in_iterator: MusicEventIterator,
in_time_stamp: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorNextEvent(in_iterator: MusicEventIterator) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorPreviousEvent(in_iterator: MusicEventIterator) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorGetEventInfo(
in_iterator: MusicEventIterator,
out_time_stamp: NonNull<MusicTimeStamp>,
out_event_type: NonNull<MusicEventType>,
out_event_data: NonNull<*const c_void>,
out_event_data_size: NonNull<u32>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorSetEventInfo(
in_iterator: MusicEventIterator,
in_event_type: MusicEventType,
in_event_data: NonNull<c_void>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorSetEventTime(
in_iterator: MusicEventIterator,
in_time_stamp: MusicTimeStamp,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorDeleteEvent(in_iterator: MusicEventIterator) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorHasPreviousEvent(
in_iterator: MusicEventIterator,
out_has_prev_event: NonNull<Boolean>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorHasNextEvent(
in_iterator: MusicEventIterator,
out_has_next_event: NonNull<Boolean>,
) -> OSStatus;
}
extern "C-unwind" {
pub fn MusicEventIteratorHasCurrentEvent(
in_iterator: MusicEventIterator,
out_has_cur_event: NonNull<Boolean>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
#[deprecated = "no longer supported"]
pub fn MusicSequenceLoadSMFDataWithFlags(
in_sequence: MusicSequence,
in_data: &CFData,
in_flags: MusicSequenceLoadFlags,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(feature = "objc2-core-foundation")]
#[deprecated = "no longer supported"]
pub fn MusicSequenceSaveSMFData(
in_sequence: MusicSequence,
out_data: NonNull<*const CFData>,
in_resolution: u16,
) -> OSStatus;
}
extern "C-unwind" {
#[deprecated = "no longer supported"]
pub fn NewMusicTrackFrom(
in_source_track: MusicTrack,
in_source_start_time: MusicTimeStamp,
in_source_end_time: MusicTimeStamp,
out_new_track: NonNull<MusicTrack>,
) -> OSStatus;
}
pub const kMusicEventType_ExtendedControl: c_uint = 2;
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct ExtendedControlEvent {
pub groupID: MusicDeviceGroupID,
pub controlID: AudioUnitParameterID,
pub value: AudioUnitParameterValue,
}
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
unsafe impl Encode for ExtendedControlEvent {
const ENCODING: Encoding = Encoding::Struct(
"ExtendedControlEvent",
&[
<MusicDeviceGroupID>::ENCODING,
<AudioUnitParameterID>::ENCODING,
<AudioUnitParameterValue>::ENCODING,
],
);
}
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
unsafe impl RefEncode for ExtendedControlEvent {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern "C-unwind" {
#[cfg(all(feature = "AUComponent", feature = "MusicDevice"))]
#[deprecated = "no longer supported"]
pub fn MusicTrackNewExtendedControlEvent(
in_track: MusicTrack,
in_time_stamp: MusicTimeStamp,
in_info: NonNull<ExtendedControlEvent>,
) -> OSStatus;
}