I am trying to build an FMsynth-based drumkit (after spending days building my own from scratch, I ended up just reverse-engineering & modifying X.FM, heheh :S). I'd like 16 different drums available at a time, each with the same modifiability. So imagine X.FM scaled way down, times 16.
Obviously I don't want to see ALL of those at once; a single UI will suffice. But I want to be able to switch to any one of the 16 instances and control them with the same UI. Initially I just used [poly~ FMsynth 16] and brought up the desired instance window, but this is rather inelegant; a separate window for a drum might be OK if I could choose instances within that one window, but ideally I'd like it to be embedded in a patch (i.e. that has other controls global to all instances).
What is the best solution?? Here's a couple I'm looking at:
1) Main patch contains a [bpatcher @name FMsynthMaster] that contains 16 [bpatcher @name FMsynth]s plus a [thispatcher] to which I send offset messages to. Easiest way, but seems wasteful?
2) A single [bpatcher @name FMsynth] containing the set of UI objects going into a [poly~ FMsynth 16]. Probably more efficient, since unused voices don't use CPU. But how to deal with windows for each instance, can't they be "embedded" in some way??
Perhaps there are other solutions that I can't think of at the moment. But there's another, hairier problem: pattrstorage.
I'd like each instance/drum to have a preset object - for 16 variations of that one drum. So, a separate .json for each drum. In the main patch I'd like to save entire 'kits' - a master json - but I'd like to include any changes I've stored in the individual drums' presets. Is there a "best" way of doing this? (and, can the master preset contain info on which .json a particular drum is using, and potentially recall an entirely new "set of presets" (via loading a new json), or is this getting way too nuts?)
These two issues seem really complicated to me while I'm planning the layout for this project. Any bits of advice would be greatly appreciated.