Top-level JUCE inheritance & dataflow diagrams

Hello, apologies if this is obvious but I didn’t see it in any tutorial or the class or modules list. I also scrolled through the Getting Started category back to November 2019 but didn’t see this asked - did revive a couple dead threads though. ;^)

Is there a top-level diagram showing how the different components interact in a JUCE application and/or plugin?

I.e. in the AudioProcessor class reference, there is an inheritance diagram. Is there a complete diagram showing the entire JUCE framework?

For comparison, EPlan has this DataModel class diagram.

Additionally, is there a top-level dataflow diagram for how audio blocks and user input are carried through a ‘typical’ JUCE program? This one is obviously much more subjective based on the individual application, but there has to be a best practice.


Edit: Overview of class hierarchy for juce, not exactly what I’m looking for but it’s something.

This probably won’t be much help to you, but if you’re using VS22, have you tried the Class Diagram feature?

Ok first of all I was tripping for a second because I thought Aaron Mader replied to my thread :rofl:

Thank you for sharing that, I will check it out and see if it’s helpful. I do use the Solution Explorer view which exposes the members of a file, but it looks like the Class Diagram may be more clear and organized.

What I was hoping for was a dataflow diagram which shows the order of calls to initialize a Juce application, process audio, etc. - basically a trace stack but for the birds-eye-view lifetime of the program.

The problem there is that not all DAWs initialize things in the same order. Especially in relation to things like the calls to save and load session state, to query and set bus arrangements, and calling prepareToPlay. Even harder to deal with if you bring ARA into the picture, because that changes how the hosts behave, and the differences between ARA hosts is even larger than with non-ARA plugins (and the ARA plugins in fact begin life as non-ARA, then get ARA “bound” to them). Too many possible time-paths to put into one cohesive picture.

1 Like

That is very good to know @HowardAntares, thank you. Perhaps the documentation for some DAWs has the kind of information I need.

Juce isn’t based on that kind of “everything inherits from a single base class” approach, so a diagram showing all the classes in Juce wouldn’t necessarily be that useful. For example AudioProcessor is a base class for audio processing things. Component is a base class for GUI widgets. And those 2 inheritance trees don’t directly really have anything to do with each other. (AudioProcessors can have Component based GUIs but the relationship there isn’t through inheritance.) There are also classes that are not even meant to be subclassed at all, like Juce String and Juce Image.

1 Like

I think I misspoke by referring to class references so much. I am really in search of a dataflow diagram.

I may have been doing Juce and similar stuff for so long that I don’t maybe understand the issue. The dataflow is mostly what you make it be yourself in the code. Do you have some kind of concrete example of a thing where you don’t understand how things are happening or should happen?