This question is for Christian Schmitz, who has urged me to ask publicly so it may benefit others (or anyone else who may know).
I’m using the AVAudioUnitSamplerMBS class to load virtual instruments into my MIDI apps. I want to get notified if the user changes the controls or the preset. The only event I see that could be useful is:
PropertyListener(ID as UInt32, Scope as UInt32, Element as UInt32)
How do I get a list of potential properties to listen for. I’d like to simply start by getting the preset the user has selected so I can set it up the next time that instrument is loaded. Thanks.
Well, I found in the headers:
#pragma mark - AUSampler
/*!
@enum Apple AUSampler Property IDs
@abstract The collection of property IDs for the Apple Sampler audio unit.
@discussion The AUSampler audio unit lets a client create an editable, interactive
sampler synthesizer instrument.
@constant kAUSamplerProperty_LoadInstrument
@discussion Scope: Global
Value Type: AUSamplerInstrumentData
Access: Write
Load an instrument from an external DLS or Soundfont2 bank file, or from other file formats.
@constant kAUSamplerProperty_LoadAudioFiles
@discussion Scope: Global
Value Type: CFArrayRef
Access: Write
Create a new preset from a list of audio file paths. The CFArray should contain a set
of CFURLRefs, one per file. The previous preset will be completely cleared.
*/
CF_ENUM(AudioUnitPropertyID) {
// range (4100->4999)
kAUSamplerProperty_LoadInstrument = 4102,
kAUSamplerProperty_LoadAudioFiles = 4101
};
1 Like
See also more properties:
1 Like
And I found CurrentPreset:
CF_ENUM(AudioUnitPropertyID) {
//kAudioUnitProperty_SetInputCallback = 7 -> deprecated
kAudioUnitProperty_SRCAlgorithm = 9, // see kAudioUnitProperty_SampleRateConverterComplexity
kAudioUnitProperty_MIDIControlMapping = 17, // see ParameterMIDIMapping Properties
kAudioUnitProperty_CurrentPreset = 28, // see PresentPreset
kAudioUnitProperty_ParameterValueName = kAudioUnitProperty_ParameterStringFromValue,
kAudioUnitProperty_BusCount = kAudioUnitProperty_ElementCount,
kAudioOfflineUnitProperty_InputSize = kAudioUnitOfflineProperty_InputSize,
kAudioOfflineUnitProperty_OutputSize = kAudioUnitOfflineProperty_OutputSize
};
and below
@constant kAudioUnitProperty_PresentPreset
Scope: Global/Part
Value Type: AUPreset
Access: read/write
This property replaces the deprecated CurrentPreset property, due to the ambiguity of
ownership of the CFString of the preset name in the older CurrentPreset property.
With PresentPreset the client of the audio unit owns the CFString when it retrieves the
preset with PresentPreset and is expected to release this (as with ALL properties
that retrieve a CF object from an audio unit).
kAudioUnitProperty_PresentPreset = 36,
1 Like
Thanks, Christian. I guess I’ve got some reading to do.