No problem at all, you came quite clearly
- The plugin is stateful, so everywhere you want to use that plugin, you need an instance.
You can use the AudioProcessorGraph. I would only do that if you want that type of host like the AudioPluginHost, where you connect the different plugins in random orders.
If you want a Cubase style chain of plugins, I would simply use a
When you playback I guess you use some AudioSources at the moment. What you need to do is to get an
AudioBuffer<float> with the audio data and a MidiBuffer (you can use an empty one to begin with, until you get to use instruments). Now you can sequentially call processBlock on all instances:
// in getNextAudioBlock()
auto proxy = juce::AudioBuffer<float>(info.buffer->getArrayOfWritePointers(), info.buffer->getNumChannels(), info.startSample, info.numSamples);
// todo: set current autimation values (optional)
// todo set position on juce::AudioPlayhead (optional)
for (auto& plugin : plugins)
plugin->processBlock (proxy, midi);
- If you need an editor, you create a window (Component and addToDesktop() and setVisible (true)) and give it the child the AudioProcessorEditor by calling
Remember, AudioPluginInstance inherits AudioProcessor, so the createEditor is available. Only methods from your specific AudioProcessors are not available.
Hope that helps