Skip to content

Commit

Permalink
AU: Improved the behaviour of setting and recalling presets
Browse files Browse the repository at this point in the history
  • Loading branch information
tpoole committed Dec 18, 2019
1 parent 54e1004 commit a268860
Showing 1 changed file with 37 additions and 4 deletions.
Expand Up @@ -1256,7 +1256,18 @@ void setCurrentProgram (int newIndex) override
{
AUPreset current;
current.presetNumber = newIndex;
current.presetName = CFSTR("");

CFArrayRef presets;
UInt32 sz = sizeof (CFArrayRef);

if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
{
if (auto* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, newIndex))
current.presetName = p->presetName;

CFRelease (presets);
}

AudioUnitSetProperty (audioUnit, kAudioUnitProperty_PresentPreset,
kAudioUnitScope_Global, 0, &current, sizeof (AUPreset));
Expand All @@ -1270,12 +1281,25 @@ const String getProgramName (int index) override
CFArrayRef presets;
UInt32 sz = sizeof (CFArrayRef);

if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
if (index == -1)
{
AUPreset current;
current.presetNumber = -1;
current.presetName = CFSTR("");

UInt32 prstsz = sizeof (AUPreset);

AudioUnitGetProperty (audioUnit, kAudioUnitProperty_PresentPreset,
kAudioUnitScope_Global, 0, &current, &prstsz);

s = String::fromCFString (current.presetName);
}
else if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
{
for (CFIndex i = 0; i < CFArrayGetCount (presets); ++i)
{
if (const AUPreset* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, i))
if (auto* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, i))
{
if (p->presetNumber == index)
{
Expand Down Expand Up @@ -1808,14 +1832,23 @@ void eventCallback (const AudioUnitEvent& event, AudioUnitParameterValue newValu

default:
if (event.mArgument.mProperty.mPropertyID == kAudioUnitProperty_ParameterList)
{
updateHostDisplay();
}
else if (event.mArgument.mProperty.mPropertyID == kAudioUnitProperty_PresentPreset)
{
sendAllParametersChangedEvents();
updateHostDisplay();
}
else if (event.mArgument.mProperty.mPropertyID == kAudioUnitProperty_Latency)
{
updateLatency();
}
else if (event.mArgument.mProperty.mPropertyID == kAudioUnitProperty_BypassEffect)
{
if (bypassParam != nullptr)
bypassParam->setValueNotifyingHost (bypassParam->getValue());
}

break;
}
Expand Down

0 comments on commit a268860

Please sign in to comment.