<div dir="ltr">Hey Michael!<div><br></div><div>I use a factory-esque pattern + a &quot;Voice&quot; interface, like this:</div><div><div><div><br></div><div>class MyVoice</div><div>{</div><div>    SqrOsc s  =&gt; LPF f =&gt; ADSR adsr =&gt; dac;</div><div>    </div><div>    fun void setFreq(float freq) { freq =&gt; s.freq; }</div><div>    fun void noteOn() { 1 =&gt; adsr.keyOn; }</div><div>    fun void noteOff() { 1 =&gt; adsr.keyOff; }</div><div>}</div><div><br></div><div>class Poly</div><div>{</div><div>    MyVoice voices[10];</div><div>    MyVoice @ voiceForNote[127];</div><div>    0 =&gt; int voiceIndex;</div><div>    </div><div>    fun MyVoice allocateVoiceForNote(int note)</div><div>    {</div><div>        voices[voiceIndex] @=&gt; MyVoice v;</div><div>        v @=&gt; voiceForNote[note];</div><div>        (voiceIndex+1)%voices.size() =&gt; voiceIndex;</div><div>        return v;</div><div>    }</div><div>    </div><div>    fun MyVoice getVoiceForNote(int note)</div><div>    {</div><div>        return voiceForNote[note];</div><div>    }</div><div>    </div><div>    fun void returnVoiceForNote(int note)</div><div>    {</div><div>        null @=&gt; voiceForNote[note];</div><div>    }</div><div>}</div></div></div><div><br></div><div>Fill in MyVoice as needed with the provided methods, as a bare minimum (you may wish to have other methods like for controlling envelope or filter, etc.). allocateVoiceForNote() pulls out the next voice whenever you need it (e.g. in response to MIDI keyDown). getVoiceForNote() is used to get the voice associated with a note e.g. in response to MIDI keyOff, and returnVoiceForNote() indicates that the voice allocated for a given note is no longer needed (also in response to MIDI noteOff). </div><div><br></div><div>allocateVoiceForNote() uses a round-robin-style voice stealing approach, but more sophisticated techniques are possible/often desirable, e.g. least recently used. <br></div><div><br></div><div>This is hastily typed pseudocode, but I have actual examples I can dig up if desired. </div><div><br></div><div>Spencer</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 11, 2017 at 2:02 PM, Michael Heuer <span dir="ltr">&lt;<a href="mailto:heuermh@gmail.com" target="_blank">heuermh@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>All,<br><br></div>I mostly play guitar and single-finger bass lines, but now my sons are starting to play keys for reals and so I&#39;m curious what the typical patterns for implementing polyphony with MIDI might be?<br><br></div>Thanks in advance,<br><br></div>   michael<br><br></div>
<br>______________________________<wbr>_________________<br>
chuck-users mailing list<br>
<a href="mailto:chuck-users@lists.cs.princeton.edu">chuck-users@lists.cs.<wbr>princeton.edu</a><br>
<a href="https://lists.cs.princeton.edu/mailman/listinfo/chuck-users" rel="noreferrer" target="_blank">https://lists.cs.princeton.<wbr>edu/mailman/listinfo/chuck-<wbr>users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-family:arial;font-size:small"><div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2">Spencer Salazar, PhD</font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2">Special Faculty</font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2">Music Technology: Interaction, Intelligence, and Design</font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2">California Institute of the Arts</font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2"><br></font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2"><a href="mailto:ssalazar@calarts.edu" target="_blank">ssalazar@calarts.edu</a> | +1 831.277.4654</font></div><div style="font-family:arial,sans-serif;font-size:12.8px"><font size="2"><a href="https://spencersalazar.com/" target="_blank">https://spencersalazar.com</a> </font></div></div><div><font size="2"><br></font></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>