this repo has no description
1/*
2This file is part of Darling.
3
4Copyright (C) 2020 Lubos Dolezel
5
6Darling is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
10
11Darling is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with Darling. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef AUCOMPONENT_H
21#define AUCOMPONENT_H
22#include <MacTypes.h>
23#include <CoreFoundation/CFString.h>
24#include <AudioToolbox/AudioComponent.h>
25#include <CoreAudio/CoreAudioTypes.h>
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31typedef AudioComponentInstance AudioUnit;
32enum {
33 kAudioUnitType_Output = 'auou',
34 kAudioUnitType_MusicDevice = 'aumu',
35 kAudioUnitType_MusicEffect = 'aumf',
36 kAudioUnitType_FormatConverter = 'aufc',
37 kAudioUnitType_Effect = 'aufx',
38 kAudioUnitType_Mixer = 'aumx',
39 kAudioUnitType_Panner = 'aupn',
40 kAudioUnitType_Generator = 'augn',
41 kAudioUnitType_OfflineEffect = 'auol',
42 kAudioUnitType_MIDIProcessor = 'aumi'
43};
44enum {
45 kAudioUnitManufacturer_Apple = 'appl'
46};
47enum {
48 kAudioUnitSubType_GenericOutput = 'genr',
49 kAudioUnitSubType_VoiceProcessingIO = 'vpio'
50};
51enum {
52 kAudioUnitSubType_HALOutput = 'ahal',
53 kAudioUnitSubType_DefaultOutput = 'def ',
54 kAudioUnitSubType_SystemOutput = 'sys ',
55};
56enum {
57 kAudioUnitSubType_DLSSynth = 'dls ',
58 kAudioUnitSubType_Sampler = 'samp',
59 kAudioUnitSubType_MIDISynth = 'msyn'
60};
61enum {
62 kAudioUnitSubType_AUConverter = 'conv',
63 kAudioUnitSubType_Varispeed = 'vari',
64 kAudioUnitSubType_DeferredRenderer = 'defr',
65 kAudioUnitSubType_Splitter = 'splt',
66 kAudioUnitSubType_MultiSplitter = 'mspl',
67 kAudioUnitSubType_Merger = 'merg',
68 kAudioUnitSubType_NewTimePitch = 'nutp',
69 kAudioUnitSubType_AUiPodTimeOther = 'ipto',
70 kAudioUnitSubType_RoundTripAAC = 'raac',
71};
72enum {
73 kAudioUnitSubType_TimePitch = 'tmpt'
74};
75enum {
76 kAudioUnitSubType_PeakLimiter = 'lmtr',
77 kAudioUnitSubType_DynamicsProcessor = 'dcmp',
78 kAudioUnitSubType_LowPassFilter = 'lpas',
79 kAudioUnitSubType_HighPassFilter = 'hpas',
80 kAudioUnitSubType_BandPassFilter = 'bpas',
81 kAudioUnitSubType_HighShelfFilter = 'hshf',
82 kAudioUnitSubType_LowShelfFilter = 'lshf',
83 kAudioUnitSubType_ParametricEQ = 'pmeq',
84 kAudioUnitSubType_Distortion = 'dist',
85 kAudioUnitSubType_Delay = 'dely',
86 kAudioUnitSubType_SampleDelay = 'sdly',
87 kAudioUnitSubType_NBandEQ = 'nbeq'
88};
89enum {
90 kAudioUnitSubType_GraphicEQ = 'greq',
91 kAudioUnitSubType_MultiBandCompressor = 'mcmp',
92 kAudioUnitSubType_MatrixReverb = 'mrev',
93 kAudioUnitSubType_Pitch = 'tmpt',
94 kAudioUnitSubType_AUFilter = 'filt',
95 kAudioUnitSubType_NetSend = 'nsnd',
96 kAudioUnitSubType_RogerBeep = 'rogr'
97};
98enum {
99 kAudioUnitSubType_MultiChannelMixer = 'mcmx',
100 kAudioUnitSubType_MatrixMixer = 'mxmx',
101 kAudioUnitSubType_SpatialMixer = '3dem',
102};
103enum {
104 kAudioUnitSubType_StereoMixer = 'smxr',
105 kAudioUnitSubType_3DMixer = '3dmx',
106
107};
108enum {
109 kAudioUnitSubType_SphericalHeadPanner = 'sphr',
110 kAudioUnitSubType_VectorPanner = 'vbas',
111 kAudioUnitSubType_SoundFieldPanner = 'ambi',
112 kAudioUnitSubType_HRTFPanner = 'hrtf'
113};
114enum {
115 kAudioUnitSubType_NetReceive = 'nrcv',
116 kAudioUnitSubType_ScheduledSoundPlayer = 'sspl',
117 kAudioUnitSubType_AudioFilePlayer = 'afpl'
118};
119typedef UInt32 AudioUnitRenderActionFlags; enum
120{
121 kAudioUnitRenderAction_PreRender = (1UL << 2),
122 kAudioUnitRenderAction_PostRender = (1UL << 3),
123 kAudioUnitRenderAction_OutputIsSilence = (1UL << 4),
124 kAudioOfflineUnitRenderAction_Preflight = (1UL << 5),
125 kAudioOfflineUnitRenderAction_Render = (1UL << 6),
126 kAudioOfflineUnitRenderAction_Complete = (1UL << 7),
127 kAudioUnitRenderAction_PostRenderError = (1UL << 8),
128 kAudioUnitRenderAction_DoNotCheckRenderArgs = (1UL << 9)
129};
130enum {
131 kAudioUnitErr_InvalidProperty = -10879,
132 kAudioUnitErr_InvalidParameter = -10878,
133 kAudioUnitErr_InvalidElement = -10877,
134 kAudioUnitErr_NoConnection = -10876,
135 kAudioUnitErr_FailedInitialization = -10875,
136 kAudioUnitErr_TooManyFramesToProcess = -10874,
137 kAudioUnitErr_InvalidFile = -10871,
138 kAudioUnitErr_UnknownFileType = -10870,
139 kAudioUnitErr_FileNotSpecified = -10869,
140 kAudioUnitErr_FormatNotSupported = -10868,
141 kAudioUnitErr_Uninitialized = -10867,
142 kAudioUnitErr_InvalidScope = -10866,
143 kAudioUnitErr_PropertyNotWritable = -10865,
144 kAudioUnitErr_CannotDoInCurrentContext = -10863,
145 kAudioUnitErr_InvalidPropertyValue = -10851,
146 kAudioUnitErr_PropertyNotInUse = -10850,
147 kAudioUnitErr_Initialized = -10849,
148 kAudioUnitErr_InvalidOfflineRender = -10848,
149 kAudioUnitErr_Unauthorized = -10847,
150 kAudioUnitErr_MIDIOutputBufferFull = -66753,
151 kAudioComponentErr_InstanceInvalidated = -66749,
152 kAudioUnitErr_RenderTimeout = -66745,
153 kAudioUnitErr_ExtensionNotFound = -66744
154};
155typedef UInt32 AudioUnitPropertyID;
156
157typedef UInt32 AudioUnitScope;
158
159
160typedef UInt32 AudioUnitElement;
161
162typedef UInt32 AudioUnitParameterID;
163
164typedef Float32 AudioUnitParameterValue;
165typedef UInt32 AUParameterEventType; enum
166{
167 kParameterEvent_Immediate = 1,
168 kParameterEvent_Ramped = 2
169};
170struct AudioUnitParameterEvent
171{
172 AudioUnitScope scope;
173 AudioUnitElement element;
174 AudioUnitParameterID parameter;
175
176 AUParameterEventType eventType;
177
178 union
179 {
180 struct
181 {
182 SInt32 startBufferOffset;
183 UInt32 durationInFrames;
184 AudioUnitParameterValue startValue;
185 AudioUnitParameterValue endValue;
186 } ramp;
187
188 struct
189 {
190 UInt32 bufferOffset;
191 AudioUnitParameterValue value;
192 } immediate;
193
194 } eventValues;
195};
196typedef struct AudioUnitParameterEvent AudioUnitParameterEvent;
197struct AudioUnitParameter
198{
199 AudioUnit mAudioUnit;
200 AudioUnitParameterID mParameterID;
201 AudioUnitScope mScope;
202 AudioUnitElement mElement;
203};
204typedef struct AudioUnitParameter AudioUnitParameter;
205struct AudioUnitProperty
206{
207 AudioUnit mAudioUnit;
208 AudioUnitPropertyID mPropertyID;
209 AudioUnitScope mScope;
210 AudioUnitElement mElement;
211};
212typedef struct AudioUnitProperty AudioUnitProperty;
213typedef OSStatus
214(*AURenderCallback)( void * inRefCon,
215 AudioUnitRenderActionFlags * ioActionFlags,
216 const AudioTimeStamp * inTimeStamp,
217 UInt32 inBusNumber,
218 UInt32 inNumberFrames,
219 AudioBufferList * _Nullable ioData);
220typedef void
221(*AudioUnitPropertyListenerProc)( void * inRefCon,
222 AudioUnit inUnit,
223 AudioUnitPropertyID inID,
224 AudioUnitScope inScope,
225 AudioUnitElement inElement);
226typedef void
227(*AUInputSamplesInOutputCallback)( void * inRefCon,
228 const AudioTimeStamp * inOutputTimeStamp,
229 Float64 inInputSample,
230 Float64 inNumberInputSamples);
231extern const CFStringRef kAudioComponentRegistrationsChangedNotification;
232extern const CFStringRef kAudioComponentInstanceInvalidationNotification;
233extern OSStatus
234AudioUnitInitialize( AudioUnit inUnit);
235
236extern OSStatus
237AudioUnitUninitialize( AudioUnit inUnit);
238
239extern OSStatus
240AudioUnitGetPropertyInfo( AudioUnit inUnit,
241 AudioUnitPropertyID inID,
242 AudioUnitScope inScope,
243 AudioUnitElement inElement,
244 UInt32 * _Nullable outDataSize,
245 Boolean * _Nullable outWritable);
246
247extern OSStatus
248AudioUnitGetProperty( AudioUnit inUnit,
249 AudioUnitPropertyID inID,
250 AudioUnitScope inScope,
251 AudioUnitElement inElement,
252 void * outData,
253 UInt32 * ioDataSize);
254
255extern OSStatus
256AudioUnitSetProperty( AudioUnit inUnit,
257 AudioUnitPropertyID inID,
258 AudioUnitScope inScope,
259 AudioUnitElement inElement,
260 const void * _Nullable inData,
261 UInt32 inDataSize);
262
263extern OSStatus
264AudioUnitAddPropertyListener( AudioUnit inUnit,
265 AudioUnitPropertyID inID,
266 AudioUnitPropertyListenerProc inProc,
267 void * _Nullable inProcUserData);
268
269extern OSStatus
270AudioUnitRemovePropertyListenerWithUserData(
271 AudioUnit inUnit,
272 AudioUnitPropertyID inID,
273 AudioUnitPropertyListenerProc inProc,
274 void * _Nullable inProcUserData);
275
276extern OSStatus
277AudioUnitAddRenderNotify( AudioUnit inUnit,
278 AURenderCallback inProc,
279 void * _Nullable inProcUserData);
280
281extern OSStatus
282AudioUnitRemoveRenderNotify( AudioUnit inUnit,
283 AURenderCallback inProc,
284 void * _Nullable inProcUserData);
285
286extern OSStatus
287AudioUnitGetParameter( AudioUnit inUnit,
288 AudioUnitParameterID inID,
289 AudioUnitScope inScope,
290 AudioUnitElement inElement,
291 AudioUnitParameterValue * outValue);
292
293extern OSStatus
294AudioUnitSetParameter( AudioUnit inUnit,
295 AudioUnitParameterID inID,
296 AudioUnitScope inScope,
297 AudioUnitElement inElement,
298 AudioUnitParameterValue inValue,
299 UInt32 inBufferOffsetInFrames);
300
301extern OSStatus
302AudioUnitScheduleParameters( AudioUnit inUnit,
303 const AudioUnitParameterEvent * inParameterEvent,
304 UInt32 inNumParamEvents);
305
306extern OSStatus
307AudioUnitRender( AudioUnit inUnit,
308 AudioUnitRenderActionFlags * _Nullable ioActionFlags,
309 const AudioTimeStamp * inTimeStamp,
310 UInt32 inOutputBusNumber,
311 UInt32 inNumberFrames,
312 AudioBufferList * ioData);
313
314extern OSStatus
315AudioUnitProcess ( AudioUnit inUnit,
316 AudioUnitRenderActionFlags * _Nullable ioActionFlags,
317 const AudioTimeStamp * inTimeStamp,
318 UInt32 inNumberFrames,
319 AudioBufferList * ioData);
320
321extern OSStatus
322AudioUnitProcessMultiple( AudioUnit inUnit,
323 AudioUnitRenderActionFlags * _Nullable ioActionFlags,
324 const AudioTimeStamp * inTimeStamp,
325 UInt32 inNumberFrames,
326 UInt32 inNumberInputBufferLists,
327 const AudioBufferList * _Nonnull * _Nonnull inInputBufferLists,
328 UInt32 inNumberOutputBufferLists,
329 AudioBufferList * _Nonnull * _Nonnull ioOutputBufferLists);
330extern OSStatus
331AudioUnitReset( AudioUnit inUnit,
332 AudioUnitScope inScope,
333 AudioUnitElement inElement);
334extern OSStatus
335AudioUnitExtensionSetComponentList(CFStringRef extensionIdentifier, _Nullable CFArrayRef audioComponentInfo);
336
337extern _Nullable CFArrayRef
338AudioUnitExtensionCopyComponentList(CFStringRef extensionIdentifier);
339
340enum {
341 kAudioUnitRange = 0x0000,
342 kAudioUnitInitializeSelect = 0x0001,
343 kAudioUnitUninitializeSelect = 0x0002,
344 kAudioUnitGetPropertyInfoSelect = 0x0003,
345 kAudioUnitGetPropertySelect = 0x0004,
346 kAudioUnitSetPropertySelect = 0x0005,
347 kAudioUnitAddPropertyListenerSelect = 0x000A,
348 kAudioUnitRemovePropertyListenerSelect = 0x000B,
349 kAudioUnitRemovePropertyListenerWithUserDataSelect = 0x0012,
350 kAudioUnitAddRenderNotifySelect = 0x000F,
351 kAudioUnitRemoveRenderNotifySelect = 0x0010,
352 kAudioUnitGetParameterSelect = 0x0006,
353 kAudioUnitSetParameterSelect = 0x0007,
354 kAudioUnitScheduleParametersSelect = 0x0011,
355 kAudioUnitRenderSelect = 0x000E,
356 kAudioUnitResetSelect = 0x0009,
357 kAudioUnitComplexRenderSelect = 0x0013,
358 kAudioUnitProcessSelect = 0x0014,
359 kAudioUnitProcessMultipleSelect = 0x0015
360};
361
362
363
364
365
366typedef OSStatus
367(*AudioUnitInitializeProc) (void *self);
368
369typedef OSStatus
370(*AudioUnitUninitializeProc) (void *self);
371
372typedef OSStatus
373(*AudioUnitGetPropertyInfoProc) (void *self, AudioUnitPropertyID prop, AudioUnitScope scope,
374 AudioUnitElement elem, UInt32 * _Nullable outDataSize, Boolean * _Nullable outWritable);
375
376typedef OSStatus
377(*AudioUnitGetPropertyProc) (void *self, AudioUnitPropertyID inID, AudioUnitScope inScope,
378 AudioUnitElement inElement, void *outData, UInt32 *ioDataSize);
379
380typedef OSStatus
381(*AudioUnitSetPropertyProc) (void *self, AudioUnitPropertyID inID, AudioUnitScope inScope,
382 AudioUnitElement inElement, const void *inData, UInt32 inDataSize);
383
384typedef OSStatus
385(*AudioUnitAddPropertyListenerProc) (void *self, AudioUnitPropertyID prop,
386 AudioUnitPropertyListenerProc proc, void *userData);
387
388typedef OSStatus
389(*AudioUnitRemovePropertyListenerProc) (void *self, AudioUnitPropertyID prop,
390 AudioUnitPropertyListenerProc proc);
391
392typedef OSStatus
393(*AudioUnitRemovePropertyListenerWithUserDataProc) (void *self, AudioUnitPropertyID prop,
394 AudioUnitPropertyListenerProc proc, void * _Nullable userData);
395
396typedef OSStatus
397(*AudioUnitAddRenderNotifyProc) (void *self, AURenderCallback proc, void * _Nullable userData);
398
399typedef OSStatus
400(*AudioUnitRemoveRenderNotifyProc) (void *self, AURenderCallback proc, void * _Nullable userData);
401
402typedef OSStatus
403(*AudioUnitScheduleParametersProc) (void *self, const AudioUnitParameterEvent *events, UInt32 numEvents);
404
405typedef OSStatus
406(*AudioUnitResetProc) (void *self, AudioUnitScope inScope, AudioUnitElement inElement);
407
408typedef OSStatus
409(*AudioUnitComplexRenderProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
410 UInt32 inOutputBusNumber, UInt32 inNumberOfPackets, UInt32 *outNumberOfPackets,
411 AudioStreamPacketDescription *outPacketDescriptions, AudioBufferList *ioData,
412 void *outMetadata, UInt32 *outMetadataByteSize);
413
414typedef OSStatus
415(*AudioUnitProcessProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
416 UInt32 inNumberFrames, AudioBufferList *ioData);
417
418typedef OSStatus
419(*AudioUnitProcessMultipleProc) (void *self, AudioUnitRenderActionFlags * _Nullable ioActionFlags, const AudioTimeStamp *inTimeStamp,
420 UInt32 inNumberFrames, UInt32 inNumberInputBufferLists, const AudioBufferList * _Nonnull * _Nonnull inInputBufferLists,
421 UInt32 inNumberOutputBufferLists, AudioBufferList * _Nonnull * _Nonnull ioOutputBufferLists);
422typedef OSStatus
423(*AudioUnitGetParameterProc)( void * inComponentStorage,
424 AudioUnitParameterID inID,
425 AudioUnitScope inScope,
426 AudioUnitElement inElement,
427 AudioUnitParameterValue * outValue);
428typedef OSStatus
429(*AudioUnitSetParameterProc)( void * inComponentStorage,
430 AudioUnitParameterID inID,
431 AudioUnitScope inScope,
432 AudioUnitElement inElement,
433 AudioUnitParameterValue inValue,
434 UInt32 inBufferOffsetInFrames);
435typedef OSStatus
436(*AudioUnitRenderProc)( void * inComponentStorage,
437 AudioUnitRenderActionFlags * _Nullable ioActionFlags,
438 const AudioTimeStamp * inTimeStamp,
439 UInt32 inOutputBusNumber,
440 UInt32 inNumberFrames,
441 AudioBufferList * ioData);
442
443enum {
444 kAudioUnitErr_IllegalInstrument = -10873,
445 kAudioUnitErr_InstrumentTypeNotFound = -10872,
446} __attribute__((deprecated));
447
448#ifdef __cplusplus
449}
450#endif
451
452#endif
453