I need to build a special purpose audio host for my own use but I don't have the time (nor the inclination) to reverse engineer the example audio host program to determine how to build my own host.
I'm willing to pay a reasonable bounty for a sample audio host problem that demonstrates CLEARLY (with useful comments) how to perform the following:
a) Create a plugin (for both AU and VST style plugins) with arbitrary number of outputs (to support stereo, multi-timbral, etc)
b) Connect the outputs of one plugin to the inputs of another (chaining)
c) Connect an external audio input to the chain
d) Connect the final output to external audio output (with ability to select audio channel)
e) A command that will invoke the plugin editor
f) The ability to both load and save the state of a plugin
g) The ability to select a MIDI input port and channel and route MIDI data to any plugin
h) The host should support the ability to create multiple separate plugin chains
i) Anything else that I forgot that would be relevant to making a simple clean example.
So in pseudo code, I'm looking for something along the lines of the following:
p1 = CreatePlugin('plugin name', 'number of inputs', 'number of outputs', anything else needed
p2 = CreatePlugin('another plugin name', 'number of inputs...etc..)
p1.ReceiveMIDIfrom(port, channel) // Could be port number or port name, I don't care, whatever works
p2.ReceiveMIDIfrom(port, channel) // Very important --- MIDI input shouldn't be exclusive, I'd like to be able to send the same MIDI to multiple plugins
p1.ClosePlugin) // or DestroyPlugin, whatever
My sense is that someone who understands the JUCE architecture could probably put together an example like this pretty quickly. Note that I don't need actual classes to be built to abstract this stuff as long as the code sequence required to perform each of them is clearly marked so that I can build the abstractions myself.
The project needs to compile with latest version of xcode on a Mac. I do not need exclusive control of the code once it's built but I'm looking for someone to kickstart it so that I can focus on adding my own functionality without having to learn (at the very beginning) all the nuances.