I'm developping a sort of synth framework build on small elements that can be connected together. I've got a lot of the infrastructure (basic audio services,midi,generic controllers) plus the basic graph connection & voicing system. Builing a synth from module works roughly in that flavor:<div>

<br></div><div>-----------------</div><div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>MGEPiggyOsc *piggyOsc1=new MGEPiggyOsc("Osc1") ;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>Insert(piggyOsc1) ;</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>MGEPiggyOsc *piggyOsc2=new MGEPiggyOsc("Osc2") ;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>Insert(piggyOsc2) ;</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>MGEMixer *mixer=new MGEMixer("Mixer",2) ;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>Insert(mixer) ;</div>
<div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>MGraph::Init(params) ;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>this->Connect(*mixer->GetInPin(0),*piggyOsc1->GetOutPin()) ;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>this->Connect(*mixer->GetInPin(1),*piggyOsc2->GetOutPin()) ;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>SetOutputPin(*mixer->GetOutPin()) ;</div>
<div><br></div><div>------------</div><div><br></div>My biggest challenge (beside writing the modules of course) left is to tackle parameter access. First of all module can have a large set of them but then the "synth" might want to expose only some of them to map to MIDI for example. I haven't really spent the time to do a proper desing for that.</div>
<div><br></div><div>It's probably overkill for a lot of people but it's very interesting to do from a software design point of view :)</div><div><br></div><div>I'm hoping at some point to be able to port it to some small embedded board and use it to roll my "own" little digital synths... or do VST, or pretty much anything :)</div>
<div><br><div class="gmail_quote"><br></div>
</div>