AU Loading fine in AU Lab but not in Logic / Garage Band

Hi,

i am trying to revive an Open Source Project that is insanely helpful when working with videogame music, as it can automatically assign the right instruments from soundfonts to midi files.

I managed to get it to build version 2.3.3 using recent versions of JUCE , and the standalone and AU versions work fine. (the recent ones always crash for some reason and this was the last stable version)

When using Logic or Garageband however, the plugin is found correctly and is loadable, but the subwindow stays empty. The plugin loads and works fine in Xcode’s AU Lab though.
I also can load the AU in Reaper without any issues.

Is there an issue with Logic and Garage Band specifically that can cause this?

Unfortunately i cant find a noob friendly way of debugging inside logic and i don´t know c++ very well.

My Software versions are:
Logic Pro 11.0
GarageBand 10.4.11
Xcode: Latest
JUCE: Latest as of today
macOS: 14.5 aarch64 Apple Silicon

I have attached screenshots to clarify the issue.

Bildschirmfoto 2024-05-16 um 13.00.32

Try to reproduce the bug with REAPER, which is a lot friendlier when it comes to debugging - you can instantiate the plugin with REAPER, and then have XCode attach to the plugin process for debugging.

Do you have a good grasp on whether the plugin is using GL? This has caused similar issues for me with some of my plugin projects. If possible, A/B the plugin when built with OpenGL versus without.

And of course the old standards apply: have you run the plugin through pluginval and seen a full log of the tests? Anything stand out? With in-process turned on/off, different test results? How about using AUVal?

Thank’s for your reply, I actually cannot replicate the bug in Reaper at all, it works completely fine there.
Interestingly it also works with Logic when using a “Wrapper” plugin (SC Universal Instrument for example is an AU that can load other AU´s and VST´s )

The Plugin Code is very basic, it doesn’t use any kind of GL as far as i can see.

AUVal lets the Plugin pass, it does log a lot though.
The Fluidsynth errors can be ignored as far as i know, they also occur with the x86_64 Version of the plugin that also works fine.

validating Audio Unit Juicy SF by birchlabs:

AU Validation Tool
Version: 1.10.0 
Copyright 2003-2019, Apple Inc. All Rights Reserved.
Specify -h (-help) for command options

VALIDATING AUDIO UNIT: ‘aumu’ - ‘Jspf’ - ‘Blbs’

Manufacturer String: birchlabs
AudioUnit Name: Juicy SF
Component Version: 1.0.0 (0x10000)

    • PASS

TESTING OPEN TIMES:
COLD:
Time to open AudioUnit: 180.094 ms
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 0 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 0 and preset number 0 in SoundFont -1
WARM:
Time to open AudioUnit: 1.692 ms
This AudioUnit is a version 2 implementation.
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 0 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 0 and preset number 0 in SoundFont -1
FIRST TIME:
Time for initialization: 0.017 ms

    • PASS

VERIFYING DEFAULT SCOPE FORMATS:
Input Scope Bus Configuration:
Default Bus Count:0

Output Scope Bus Configuration:
Default Bus Count:1
Bus Name: Output
Default Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, Float32, deinterleaved

    • PASS

VERIFYING REQUIRED PROPERTIES:

    • PASS

VERIFYING RECOMMENDED PROPERTIES:
VERIFYING PROPERTY: Latency
PASS

    • PASS

VERIFYING OPTIONAL PROPERTIES:
VERIFYING PROPERTY: Tail Time
PASS
VERIFYING PROPERTY: Bypass Effect
PASS

    • PASS

VERIFYING SPECIAL PROPERTIES:

VERIFYING CUSTOM UI
Cocoa Views Available: 1
JUCE_AUCocoaViewClass_4bdb4736e47fb49
PASS

HAS FACTORY PRESETS

VERIFYING CLASS INFO
PASS

TESTING HOST CALLBACKS
PASS

    • PASS

PUBLISHED PARAMETER INFO:

# # 8 Global Scope Parameters:

fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 128 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 0 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 45 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 45 and preset number 127 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 45 and preset number 0 in SoundFont -1
fluidsynth: error: No SoundFont with id = -1
fluidsynth: error: There is no preset with bank number 45 and preset number 9 in SoundFont -1

    • PASS

FORMAT TESTS:

Reported Channel Capabilities (explicit):
[0, 1] [0, 2]

No Input, Output Chans:
0-1 0-2 0-4 0-5 0-6 0-7 0-8
X X

    • PASS

RENDER TESTS:

Output Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, Float32, deinterleaved
Render Test at 512 frames
Slicing Render Test at 64 frames
PASS

Render Test at 64 frames, sample rate: 22050 Hz
Render Test at 137 frames, sample rate: 96000 Hz
Render Test at 4096 frames, sample rate: 48000 Hz
Render Test at 4096 frames, sample rate: 192000 Hz
Render Test at 4096 frames, sample rate: 11025 Hz
Render Test at 512 frames, sample rate: 44100 Hz
PASS

1 Channel Test:
Render Test at 512 frames
PASS

Bad Max Frames - Render should fail
PASS

Checking parameter setting
Using AudioUnitSetParameter
Using AudioUnitScheduleParameter
PASS

Checking ramped parameter scheduling
PASS

Test MIDI
PASS

    • PASS

AU VALIDATION SUCCEEDED.

validation result: Validierung erfolgreich

updating properties of AU Juicy SF by birchlabs…

When running the standalone plugin through a debugger i actually get this error:

JUCE Assertion failure in juce_LookAndFeel.cpp:85

this sounds like it may be the issue, but i dont know what causes it.
It seems to hit jassertfalse; in thise code:

Colour LookAndFeel::findColour (int colourID) const noexcept

{

const ColourSetting c = { colourID, Colour() };

auto index = colours.indexOf (c);

if (index >= 0)

return colours[index].colour;

jassertfalse;

return Colours::black;

}