Current preset name not always updated by Logic Pro X and Garageband

Hi,

Changing the current preset name with AudioProcessor::changeProgramName() and then calling updateHostDisplay() does not always result in the updated preset name being displayed by garageband or logic.

You can reproduce that easily with the Juce Plugin Demo, in the AudioProcessor, store the current program name:

String program_name;
const String getProgramName (int index) override                        { return program_name; }
void changeProgramName (int /*index*/, const String& name) override     { program_name = name; }

And in the editor, add button such that each time it is clicked it changes the preset name:

void buttonClicked(Button *) override {
    static int count = 0;
    ++count;
    getProcessor().changeProgramName(0, "This is Program" + String(count));
    getProcessor().updateHostDisplay();
}

on my macbook, the name is correctly updated in the host approximately 40% of the time I click on the button.

This issue is a bit annoying, I must say.

Sorry - looking at this is in our backlog and we’ll get to it eventually.

Any updates on this issue? I just stumbled over the same problem with JUCE 5.3.2 and Logic X. Program name changes are not reliably recognised by Logic every second or third time updateHostDisplay() is called…

Sorry to revive an old discussion. Was there any update on this?

I’ve noticed that with JUCE 6.0.8, in Garageband iOS, when updating a program name in the AUv3 internally, and subsequently requesting a updateHostDisplay(ChangeParameters) with the programChanged = true set, GarageBand does not update its list of presets and keeps the old ones.

This causes quite some confusion for people who use the preset list, and think they are running a different preset than what is actually used, if program names have changed…

And to follow up on this:

If the auv3 changes the program number internally, the tick box in the host preset list indicating which program is active doesn’t change either. This happens in GarageBand and also in AUM.

This behaviour needs to be supported both by the host and by the client in order to work as expected.

On the client side, it looks like we don’t currently notify the host when the currentPreset is changed. I think this should be a fairly simple addition, so I’ll look at making this change.

On the hosting side, the host needs to know to observe the currentPreset property (or kAudioUnitProperty_PresentPreset in an AUv2) and update the preset list accordingly. As far as I can tell, GarageBand does not currently do this, so I don’t think we can make this work even if we update JUCE.

If you’re aware of any AUv3 plugins that can successfully report a program change to GarageBand, please let me know so that I can try to work out how this is accomplished.

It does look like JUCE hosts should already be able to respond to program change notifications from AUv3 plugins, as long as the plugins notify that their currentPreset property is changing - the AUv3->AUv2 bridge appears to send a PresentPreset change notification when the AUv3’s currentPreset property is updated.

2 Likes

I’ve now updated the AUv3 wrapper to report program changes to the host:

Again, this still requires support from hosts, so this still won’t work in GarageBand for the time being.