[chuck-users] polyphony with MIDI

Spencer Salazar spencer at ccrma.stanford.edu
Mon Dec 11 16:07:31 EST 2017

Hey Michael!

I use a factory-esque pattern + a "Voice" interface, like this:

class MyVoice
    SqrOsc s  => LPF f => ADSR adsr => dac;

    fun void setFreq(float freq) { freq => s.freq; }
    fun void noteOn() { 1 => adsr.keyOn; }
    fun void noteOff() { 1 => adsr.keyOff; }

class Poly
    MyVoice voices[10];
    MyVoice @ voiceForNote[127];
    0 => int voiceIndex;

    fun MyVoice allocateVoiceForNote(int note)
        voices[voiceIndex] @=> MyVoice v;
        v @=> voiceForNote[note];
        (voiceIndex+1)%voices.size() => voiceIndex;
        return v;

    fun MyVoice getVoiceForNote(int note)
        return voiceForNote[note];

    fun void returnVoiceForNote(int note)
        null @=> voiceForNote[note];

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).

allocateVoiceForNote() uses a round-robin-style voice stealing approach,
but more sophisticated techniques are possible/often desirable, e.g. least
recently used.

This is hastily typed pseudocode, but I have actual examples I can dig up
if desired.


On Mon, Dec 11, 2017 at 2:02 PM, Michael Heuer <heuermh at gmail.com> wrote:

> All,
> I mostly play guitar and single-finger bass lines, but now my sons are
> starting to play keys for reals and so I'm curious what the typical
> patterns for implementing polyphony with MIDI might be?
> Thanks in advance,
>    michael
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

Spencer Salazar, PhD
Special Faculty
Music Technology: Interaction, Intelligence, and Design
California Institute of the Arts

ssalazar at calarts.edu | +1 831.277.4654
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20171211/57c96413/attachment.html>

More information about the chuck-users mailing list