Is JUCE well suited for a Wwise/FMOD-like application?

Audio newbie here. I’m fiddling around with an application that is in the style of audio middleware programs like Wwise and FMOD. It’s not middleware though, you’ll never export or interface with it, it’s basically an audio player on steroids where you can configure groups of sounds to play based on states/RTPCs/events and such, just like in Wwise/FMOD.

So far JUCE is working nicely for the GUI part and I want to start playing with the actual audio part. JUCE feels very low-level in terms of how you control the streams of audio, and mostly catered to doing plugins. Again I’m a complete beginner in the audio field so please correct me if I’m wrong!

I’m wondering whether JUCE is an appropriate choice for the audio part of this application (controlling playback of many sounds files in accordance with a shared set of states that is changeable dynamically) as well or if it would be better suited to integrate eg. FMOD Core API into the JUCE application for that, since it feels like a more relevant abstraction over sound files in general.

Any advice is much appreciated, thank you!

Juce has pretty good(*) facilities for playing back audio files and there is nothing plugins specific about those things. Some classes of interest : AudioFormatManager, AudioFormatReader, AudioFormatReaderSource, MixerAudioSource, AudioTransportSource, AudioDeviceManager, AudioSourcePlayer. You do have to figure out how to connect/use those together. I don’t recall how higher level the FMOD API is compared to that.

(*) But not perfect facilities, there is for example no built-in way to loop a section of an audio file with a crossfade or a way to play back files in reverse. You would need to implement those kinds of things yourself.

Thank you! How about things such as grouping sounds and controlling their parameters (dsp/effects, gain, pitch) as a whole? Like a graph of things where a node’s parameters affects children.

Juce does not have exactly that kind of stuff built-in, you’d probably need to implement it yourself. There is the AudioProcessorGraph but that is basically for routing hosted plugins/audioprocessors between each other in a quite simple way. It might do some things you are after, but it’s difficult to say without more information.