Well I found this post from a while back that has an example of using AudioProcessorGraph.
What do you think about that example? So my idea of it was totally wrong based on this example. It seems like you create a "main" AudioProcessor, create an AudioProcessorGraph object in it, and set it up, add nodes, etc. from there. Is that right? Then I would just create an AudioProcessorEditor for that "main" processor. If that's the case, I think I might be able to get something working.
I'm still curious how I would select between different oscillators in a single Synthesizer object. I'm thinking that I could just create one SynthesizerVoice, implement all of my different oscillator types in that (within switch statement cases), and create a member function (setType() or something) that will change the index of the switch statement and the member variables of needed.
I think once I find a good structure, I'll be able to stick with it and make some neat synthesizers. I guess figuring out how everything can work together is the hardest part, to me anyways.
Thank you for mentioning AudioProcessorGraph. I really look forward to figuring that out because when I think of a good synth, I think of flexible routing, and that seems like the way to go. I'll just have to experiment with it and look for more forum posts, and code examples of I can find any that I can understand. Hopefully someone will chime in and help a noob figure this out. :)