/*
This file is part of Darling.
Copyright (C) 2020 Lubos Dolezel
Darling is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Darling is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Darling. If not, see .
*/
#ifndef AUCOMPONENT_H
#define AUCOMPONENT_H
#include
#include
#include
#include
#ifdef __cplusplus
extern "C" {
#endif
typedef AudioComponentInstance AudioUnit;
enum {
kAudioUnitType_Output = 'auou',
kAudioUnitType_MusicDevice = 'aumu',
kAudioUnitType_MusicEffect = 'aumf',
kAudioUnitType_FormatConverter = 'aufc',
kAudioUnitType_Effect = 'aufx',
kAudioUnitType_Mixer = 'aumx',
kAudioUnitType_Panner = 'aupn',
kAudioUnitType_Generator = 'augn',
kAudioUnitType_OfflineEffect = 'auol',
kAudioUnitType_MIDIProcessor = 'aumi'
};
enum {
kAudioUnitManufacturer_Apple = 'appl'
};
enum {
kAudioUnitSubType_GenericOutput = 'genr',
kAudioUnitSubType_VoiceProcessingIO = 'vpio'
};
enum {
kAudioUnitSubType_HALOutput = 'ahal',
kAudioUnitSubType_DefaultOutput = 'def ',
kAudioUnitSubType_SystemOutput = 'sys ',
};
enum {
kAudioUnitSubType_DLSSynth = 'dls ',
kAudioUnitSubType_Sampler = 'samp',
kAudioUnitSubType_MIDISynth = 'msyn'
};
enum {
kAudioUnitSubType_AUConverter = 'conv',
kAudioUnitSubType_Varispeed = 'vari',
kAudioUnitSubType_DeferredRenderer = 'defr',
kAudioUnitSubType_Splitter = 'splt',
kAudioUnitSubType_MultiSplitter = 'mspl',
kAudioUnitSubType_Merger = 'merg',
kAudioUnitSubType_NewTimePitch = 'nutp',
kAudioUnitSubType_AUiPodTimeOther = 'ipto',
kAudioUnitSubType_RoundTripAAC = 'raac',
};
enum {
kAudioUnitSubType_TimePitch = 'tmpt'
};
enum {
kAudioUnitSubType_PeakLimiter = 'lmtr',
kAudioUnitSubType_DynamicsProcessor = 'dcmp',
kAudioUnitSubType_LowPassFilter = 'lpas',
kAudioUnitSubType_HighPassFilter = 'hpas',
kAudioUnitSubType_BandPassFilter = 'bpas',
kAudioUnitSubType_HighShelfFilter = 'hshf',
kAudioUnitSubType_LowShelfFilter = 'lshf',
kAudioUnitSubType_ParametricEQ = 'pmeq',
kAudioUnitSubType_Distortion = 'dist',
kAudioUnitSubType_Delay = 'dely',
kAudioUnitSubType_SampleDelay = 'sdly',
kAudioUnitSubType_NBandEQ = 'nbeq'
};
enum {
kAudioUnitSubType_GraphicEQ = 'greq',
kAudioUnitSubType_MultiBandCompressor = 'mcmp',
kAudioUnitSubType_MatrixReverb = 'mrev',
kAudioUnitSubType_Pitch = 'tmpt',
kAudioUnitSubType_AUFilter = 'filt',
kAudioUnitSubType_NetSend = 'nsnd',
kAudioUnitSubType_RogerBeep = 'rogr'
};
enum {
kAudioUnitSubType_MultiChannelMixer = 'mcmx',
kAudioUnitSubType_MatrixMixer = 'mxmx',
kAudioUnitSubType_SpatialMixer = '3dem',
};
enum {
kAudioUnitSubType_StereoMixer = 'smxr',
kAudioUnitSubType_3DMixer = '3dmx',
};
enum {
kAudioUnitSubType_SphericalHeadPanner = 'sphr',
kAudioUnitSubType_VectorPanner = 'vbas',
kAudioUnitSubType_SoundFieldPanner = 'ambi',
kAudioUnitSubType_HRTFPanner = 'hrtf'
};
enum {
kAudioUnitSubType_NetReceive = 'nrcv',
kAudioUnitSubType_ScheduledSoundPlayer = 'sspl',
kAudioUnitSubType_AudioFilePlayer = 'afpl'
};
typedef UInt32 AudioUnitRenderActionFlags; enum
{
kAudioUnitRenderAction_PreRender = (1UL << 2),
kAudioUnitRenderAction_PostRender = (1UL << 3),
kAudioUnitRenderAction_OutputIsSilence = (1UL << 4),
kAudioOfflineUnitRenderAction_Preflight = (1UL << 5),
kAudioOfflineUnitRenderAction_Render = (1UL << 6),
kAudioOfflineUnitRenderAction_Complete = (1UL << 7),
kAudioUnitRenderAction_PostRenderError = (1UL << 8),
kAudioUnitRenderAction_DoNotCheckRenderArgs = (1UL << 9)
};
enum {
kAudioUnitErr_InvalidProperty = -10879,
kAudioUnitErr_InvalidParameter = -10878,
kAudioUnitErr_InvalidElement = -10877,
kAudioUnitErr_NoConnection = -10876,
kAudioUnitErr_FailedInitialization = -10875,
kAudioUnitErr_TooManyFramesToProcess = -10874,
kAudioUnitErr_InvalidFile = -10871,
kAudioUnitErr_UnknownFileType = -10870,
kAudioUnitErr_FileNotSpecified = -10869,
kAudioUnitErr_FormatNotSupported = -10868,
kAudioUnitErr_Uninitialized = -10867,
kAudioUnitErr_InvalidScope = -10866,
kAudioUnitErr_PropertyNotWritable = -10865,
kAudioUnitErr_CannotDoInCurrentContext = -10863,
kAudioUnitErr_InvalidPropertyValue = -10851,
kAudioUnitErr_PropertyNotInUse = -10850,
kAudioUnitErr_Initialized = -10849,
kAudioUnitErr_InvalidOfflineRender = -10848,
kAudioUnitErr_Unauthorized = -10847,
kAudioUnitErr_MIDIOutputBufferFull = -66753,
kAudioComponentErr_InstanceInvalidated = -66749,
kAudioUnitErr_RenderTimeout = -66745,
kAudioUnitErr_ExtensionNotFound = -66744
};
typedef UInt32 AudioUnitPropertyID;
typedef UInt32 AudioUnitScope;
typedef UInt32 AudioUnitElement;
typedef UInt32 AudioUnitParameterID;
typedef Float32 AudioUnitParameterValue;
typedef UInt32 AUParameterEventType; enum
{
kParameterEvent_Immediate = 1,
kParameterEvent_Ramped = 2
};
struct AudioUnitParameterEvent
{
AudioUnitScope scope;
AudioUnitElement element;
AudioUnitParameterID parameter;
AUParameterEventType eventType;
union
{
struct
{
SInt32 startBufferOffset;
UInt32 durationInFrames;
AudioUnitParameterValue startValue;
AudioUnitParameterValue endValue;
} ramp;
struct
{
UInt32 bufferOffset;
AudioUnitParameterValue value;
} immediate;
} eventValues;
};
typedef struct AudioUnitParameterEvent AudioUnitParameterEvent;
struct AudioUnitParameter
{
AudioUnit mAudioUnit;
AudioUnitParameterID mParameterID;
AudioUnitScope mScope;
AudioUnitElement mElement;
};
typedef struct AudioUnitParameter AudioUnitParameter;
struct AudioUnitProperty
{
AudioUnit mAudioUnit;
AudioUnitPropertyID mPropertyID;
AudioUnitScope mScope;
AudioUnitElement mElement;
};
typedef struct AudioUnitProperty AudioUnitProperty;
typedef OSStatus
(*AURenderCallback)( void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * _Nullable ioData);
typedef void
(*AudioUnitPropertyListenerProc)( void * inRefCon,
AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement);
typedef void
(*AUInputSamplesInOutputCallback)( void * inRefCon,
const AudioTimeStamp * inOutputTimeStamp,
Float64 inInputSample,
Float64 inNumberInputSamples);
extern const CFStringRef kAudioComponentRegistrationsChangedNotification;
extern const CFStringRef kAudioComponentInstanceInvalidationNotification;
extern OSStatus
AudioUnitInitialize( AudioUnit inUnit);
extern OSStatus
AudioUnitUninitialize( AudioUnit inUnit);
extern OSStatus
AudioUnitGetPropertyInfo( AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 * _Nullable outDataSize,
Boolean * _Nullable outWritable);
extern OSStatus
AudioUnitGetProperty( AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData,
UInt32 * ioDataSize);
extern OSStatus
AudioUnitSetProperty( AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
const void * _Nullable inData,
UInt32 inDataSize);
extern OSStatus
AudioUnitAddPropertyListener( AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitPropertyListenerProc inProc,
void * _Nullable inProcUserData);
extern OSStatus
AudioUnitRemovePropertyListenerWithUserData(
AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitPropertyListenerProc inProc,
void * _Nullable inProcUserData);
extern OSStatus
AudioUnitAddRenderNotify( AudioUnit inUnit,
AURenderCallback inProc,
void * _Nullable inProcUserData);
extern OSStatus
AudioUnitRemoveRenderNotify( AudioUnit inUnit,
AURenderCallback inProc,
void * _Nullable inProcUserData);
extern OSStatus
AudioUnitGetParameter( AudioUnit inUnit,
AudioUnitParameterID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
AudioUnitParameterValue * outValue);
extern OSStatus
AudioUnitSetParameter( AudioUnit inUnit,
AudioUnitParameterID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
AudioUnitParameterValue inValue,
UInt32 inBufferOffsetInFrames);
extern OSStatus
AudioUnitScheduleParameters( AudioUnit inUnit,
const AudioUnitParameterEvent * inParameterEvent,
UInt32 inNumParamEvents);
extern OSStatus
AudioUnitRender( AudioUnit inUnit,
AudioUnitRenderActionFlags * _Nullable ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inOutputBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData);
extern OSStatus
AudioUnitProcess ( AudioUnit inUnit,
AudioUnitRenderActionFlags * _Nullable ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inNumberFrames,
AudioBufferList * ioData);
extern OSStatus
AudioUnitProcessMultiple( AudioUnit inUnit,
AudioUnitRenderActionFlags * _Nullable ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inNumberFrames,
UInt32 inNumberInputBufferLists,
const AudioBufferList * _Nonnull * _Nonnull inInputBufferLists,
UInt32 inNumberOutputBufferLists,
AudioBufferList * _Nonnull * _Nonnull ioOutputBufferLists);
extern OSStatus
AudioUnitReset( AudioUnit inUnit,
AudioUnitScope inScope,
AudioUnitElement inElement);
extern OSStatus
AudioUnitExtensionSetComponentList(CFStringRef extensionIdentifier, _Nullable CFArrayRef audioComponentInfo);
extern _Nullable CFArrayRef
AudioUnitExtensionCopyComponentList(CFStringRef extensionIdentifier);
enum {
kAudioUnitRange = 0x0000,
kAudioUnitInitializeSelect = 0x0001,
kAudioUnitUninitializeSelect = 0x0002,
kAudioUnitGetPropertyInfoSelect = 0x0003,
kAudioUnitGetPropertySelect = 0x0004,
kAudioUnitSetPropertySelect = 0x0005,
kAudioUnitAddPropertyListenerSelect = 0x000A,
kAudioUnitRemovePropertyListenerSelect = 0x000B,
kAudioUnitRemovePropertyListenerWithUserDataSelect = 0x0012,
kAudioUnitAddRenderNotifySelect = 0x000F,
kAudioUnitRemoveRenderNotifySelect = 0x0010,
kAudioUnitGetParameterSelect = 0x0006,
kAudioUnitSetParameterSelect = 0x0007,
kAudioUnitScheduleParametersSelect = 0x0011,
kAudioUnitRenderSelect = 0x000E,
kAudioUnitResetSelect = 0x0009,
kAudioUnitComplexRenderSelect = 0x0013,
kAudioUnitProcessSelect = 0x0014,
kAudioUnitProcessMultipleSelect = 0x0015
};
typedef OSStatus
(*AudioUnitInitializeProc) (void *self);
typedef OSStatus
(*AudioUnitUninitializeProc) (void *self);
typedef OSStatus
(*AudioUnitGetPropertyInfoProc) (void *self, AudioUnitPropertyID prop, AudioUnitScope scope,
AudioUnitElement elem, UInt32 * _Nullable outDataSize, Boolean * _Nullable outWritable);
typedef OSStatus
(*AudioUnitGetPropertyProc) (void *self, AudioUnitPropertyID inID, AudioUnitScope inScope,
AudioUnitElement inElement, void *outData, UInt32 *ioDataSize);
typedef OSStatus
(*AudioUnitSetPropertyProc) (void *self, AudioUnitPropertyID inID, AudioUnitScope inScope,
AudioUnitElement inElement, const void *inData, UInt32 inDataSize);
typedef OSStatus
(*AudioUnitAddPropertyListenerProc) (void *self, AudioUnitPropertyID prop,
AudioUnitPropertyListenerProc proc, void *userData);
typedef OSStatus
(*AudioUnitRemovePropertyListenerProc) (void *self, AudioUnitPropertyID prop,
AudioUnitPropertyListenerProc proc);
typedef OSStatus
(*AudioUnitRemovePropertyListenerWithUserDataProc) (void *self, AudioUnitPropertyID prop,
AudioUnitPropertyListenerProc proc, void * _Nullable userData);
typedef OSStatus
(*AudioUnitAddRenderNotifyProc) (void *self, AURenderCallback proc, void * _Nullable userData);
typedef OSStatus
(*AudioUnitRemoveRenderNotifyProc) (void *self, AURenderCallback proc, void * _Nullable userData);
typedef OSStatus
(*AudioUnitScheduleParametersProc) (void *self, const AudioUnitParameterEvent *events, UInt32 numEvents);
typedef OSStatus
(*AudioUnitResetProc) (void *self, AudioUnitScope inScope, AudioUnitElement inElement);
typedef OSStatus
(*AudioUnitComplexRenderProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
UInt32 inOutputBusNumber, UInt32 inNumberOfPackets, UInt32 *outNumberOfPackets,
AudioStreamPacketDescription *outPacketDescriptions, AudioBufferList *ioData,
void *outMetadata, UInt32 *outMetadataByteSize);
typedef OSStatus
(*AudioUnitProcessProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
UInt32 inNumberFrames, AudioBufferList *ioData);
typedef OSStatus
(*AudioUnitProcessMultipleProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
UInt32 inNumberFrames, UInt32 inNumberInputBufferLists, const AudioBufferList * _Nonnull * _Nonnull inInputBufferLists,
UInt32 inNumberOutputBufferLists, AudioBufferList * _Nonnull * _Nonnull ioOutputBufferLists);
typedef OSStatus
(*AudioUnitGetParameterProc)( void * inComponentStorage,
AudioUnitParameterID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
AudioUnitParameterValue * outValue);
typedef OSStatus
(*AudioUnitSetParameterProc)( void * inComponentStorage,
AudioUnitParameterID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
AudioUnitParameterValue inValue,
UInt32 inBufferOffsetInFrames);
typedef OSStatus
(*AudioUnitRenderProc)( void * inComponentStorage,
AudioUnitRenderActionFlags * _Nullable ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inOutputBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData);
enum {
kAudioUnitErr_IllegalInstrument = -10873,
kAudioUnitErr_InstrumentTypeNotFound = -10872,
} __attribute__((deprecated));
#ifdef __cplusplus
}
#endif
#endif