Hi I've written a sampler class that simplifies various things, that I found I have to re-invent over and over again: * Polyphony, with dynamic voice allocation (stealing of oldest note) * Optional envelope * Automatic handling of stereo samples * Supports multi-samples (zones) I tried to make it easy to use and flexible enough to work with simple one-shot drums and polyphonic, multi-sampled, enveloped samples (strings, piano, etc). I'm gonna add build-in midi support + support for more code like length based triggering. Have anyone done something similar? Any interest in me posting it on http://wiki.cs.princeton.edu/index.php/Chuck/Lib when it's more thoroughly tested? -- Atte http://atte.dk http://modlys.dk
2009/2/7 Atte André Jensen
I've written a sampler class that simplifies various things, that I found I have to re-invent over and over again: * Polyphony, with dynamic voice allocation (stealing of oldest note) * Optional envelope * Automatic handling of stereo samples * Supports multi-samples (zones)
I tried to make it easy to use and flexible enough to work with simple one-shot drums and polyphonic, multi-sampled, enveloped samples (strings, piano, etc).
I'm gonna add build-in midi support + support for more code like length based triggering.
Have anyone done something similar? Any interest in me posting it on http://wiki.cs.princeton.edu/index.php/Chuck/Lib when it's more thoroughly tested?
It'd be great if you could post that! My own polyphony implementation is rather sketchy, since I have yet to figure out how to do it well. -- Tom Lieber http://AllTom.com/
Tom Lieber wrote:
It'd be great if you could post that! My own polyphony implementation is rather sketchy, since I have yet to figure out how to do it well.
I put it here: http://wiki.cs.princeton.edu/index.php/Sampler -- Atte http://atte.dk http://modlys.dk
Hey, Atte!
I've written a sampler class that simplifies various things, that I found I have to re-invent over and over again:
Cool!
* Polyphony, with dynamic voice allocation (stealing of oldest note)
This can be a bit tricky. Did you look into event signaling (as opposed to broadcasting)? Event signaling will do most of what you need, I think? You basically get the cycling for free. "real" samplers, and synths tend to go about this in a way that's a bit more advanced. For starters they tend to check whether a incoming note (say a C3) refers to a key that already has a sounding voice linked to it and in that case cycle this sounding one instead of the oldest one. They also tend to "protect" the lowest or highest note (or both) and only cycle those voices when they have finished sounding or when it's unavoidable to cycle them. This is obviously a bit harder to implement but will keep how objectionable "stolen" voices are to a relative minimum. I've been wondering whether we couldn't use yet more advanced strategies. For example we might want to protect the loudest currently sounding voice in highly dynamic pieces more than the lowest (in pitch) one. I could also imagine that in cases where some chord involves multiple versions of the same note (like both A3 and A4) we might prefer to cycle the A4 over the -let's say- G3 that might also be sounding because dropping the A4 will likely be less audible. To go yet more advanced; we might imagine a voice architecture where voices themselves could detect when the most interesting sections of their sound has finished and so put themselves "in the recycling bin" voluntarily. I've been thinking about these things for a while now but typically I don't compose for many voices myself, maybe some of this will be useful to somebody who wants to get the most voices out of his/her computer in the most efficient way.
Any interest in me posting it on http://wiki.cs.princeton.edu/index.php/Chuck/Lib when it's more thoroughly tested?
Of course! On the Forum there have been occasional questions about polyphony/voice cycling, I'm sure your take on it will be helpful to people. Yours, Kas.
participants (3)
-
Atte André Jensen
-
Kassen
-
Tom Lieber