|
|
@@ -1213,23 +1213,33 @@ public: |
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
int getNumPrograms() override
|
|
|
|
struct ScopedFactoryPresets
|
|
|
|
{
|
|
|
|
CFArrayRef presets;
|
|
|
|
UInt32 sz = sizeof (CFArrayRef);
|
|
|
|
int num = 0;
|
|
|
|
ScopedFactoryPresets (AudioUnit& au)
|
|
|
|
{
|
|
|
|
UInt32 sz = sizeof (CFArrayRef);
|
|
|
|
|
|
|
|
AudioUnitGetProperty (au, kAudioUnitProperty_FactoryPresets,
|
|
|
|
kAudioUnitScope_Global, 0, &presets, &sz);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
|
|
|
|
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
|
|
|
|
~ScopedFactoryPresets()
|
|
|
|
{
|
|
|
|
if (presets != nullptr)
|
|
|
|
{
|
|
|
|
num = (int) CFArrayGetCount (presets);
|
|
|
|
CFRelease (presets);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return num;
|
|
|
|
CFArrayRef presets = nullptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
int getNumPrograms() override
|
|
|
|
{
|
|
|
|
ScopedFactoryPresets factoryPresets { audioUnit };
|
|
|
|
|
|
|
|
if (factoryPresets.presets != nullptr)
|
|
|
|
return (int) CFArrayGetCount (factoryPresets.presets);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int getCurrentProgram() override
|
|
|
@@ -1246,33 +1256,26 @@ public: |
|
|
|
|
|
|
|
void setCurrentProgram (int newIndex) override
|
|
|
|
{
|
|
|
|
AUPreset current;
|
|
|
|
current.presetNumber = newIndex;
|
|
|
|
|
|
|
|
CFArrayRef presets;
|
|
|
|
UInt32 sz = sizeof (CFArrayRef);
|
|
|
|
ScopedFactoryPresets factoryPresets { audioUnit };
|
|
|
|
|
|
|
|
if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
|
|
|
|
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
|
|
|
|
if (factoryPresets.presets != nullptr
|
|
|
|
&& newIndex < (int) CFArrayGetCount (factoryPresets.presets))
|
|
|
|
{
|
|
|
|
if (auto* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, newIndex))
|
|
|
|
current.presetName = p->presetName;
|
|
|
|
AUPreset current;
|
|
|
|
current.presetNumber = newIndex;
|
|
|
|
|
|
|
|
CFRelease (presets);
|
|
|
|
}
|
|
|
|
if (auto* p = static_cast<const AUPreset*> (CFArrayGetValueAtIndex (factoryPresets.presets, newIndex)))
|
|
|
|
current.presetName = p->presetName;
|
|
|
|
|
|
|
|
AudioUnitSetProperty (audioUnit, kAudioUnitProperty_PresentPreset,
|
|
|
|
kAudioUnitScope_Global, 0, ¤t, sizeof (AUPreset));
|
|
|
|
AudioUnitSetProperty (audioUnit, kAudioUnitProperty_PresentPreset,
|
|
|
|
kAudioUnitScope_Global, 0, ¤t, sizeof (AUPreset));
|
|
|
|
|
|
|
|
sendAllParametersChangedEvents();
|
|
|
|
sendAllParametersChangedEvents();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const String getProgramName (int index) override
|
|
|
|
{
|
|
|
|
String s;
|
|
|
|
CFArrayRef presets;
|
|
|
|
UInt32 sz = sizeof (CFArrayRef);
|
|
|
|
|
|
|
|
if (index == -1)
|
|
|
|
{
|
|
|
|
AUPreset current;
|
|
|
@@ -1284,27 +1287,20 @@ public: |
|
|
|
AudioUnitGetProperty (audioUnit, kAudioUnitProperty_PresentPreset,
|
|
|
|
kAudioUnitScope_Global, 0, ¤t, &prstsz);
|
|
|
|
|
|
|
|
s = String::fromCFString (current.presetName);
|
|
|
|
return String::fromCFString (current.presetName);
|
|
|
|
}
|
|
|
|
else if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_FactoryPresets,
|
|
|
|
kAudioUnitScope_Global, 0, &presets, &sz) == noErr)
|
|
|
|
|
|
|
|
ScopedFactoryPresets factoryPresets { audioUnit };
|
|
|
|
|
|
|
|
if (factoryPresets.presets != nullptr)
|
|
|
|
{
|
|
|
|
for (CFIndex i = 0; i < CFArrayGetCount (presets); ++i)
|
|
|
|
{
|
|
|
|
if (auto* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, i))
|
|
|
|
{
|
|
|
|
for (CFIndex i = 0; i < CFArrayGetCount (factoryPresets.presets); ++i)
|
|
|
|
if (auto* p = static_cast<const AUPreset*> (CFArrayGetValueAtIndex (factoryPresets.presets, i)))
|
|
|
|
if (p->presetNumber == index)
|
|
|
|
{
|
|
|
|
s = String::fromCFString (p->presetName);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
CFRelease (presets);
|
|
|
|
return String::fromCFString (p->presetName);
|
|
|
|
}
|
|
|
|
|
|
|
|
return s;
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
void changeProgramName (int /*index*/, const String& /*newName*/) override
|
|
|
|