Yeah, thanks José.
Is truly a good approach.
Another thing i've to think about is how to deal with envelopes retriggering at the voice level.
If the same note is retriggered i guess the approaches can be
1. "Hard" retrigger. Quit the previous envelope and start the new one
2. "Not so hard" retrigger. Retrigger the new envelope starting from the same value reached by the previous envelope.
3. "Soft" retrigger. Make a very quick fade out of the previous envelope while the new one is starting (but this mode should allocate a new voice so the 128 sized array is no more useful)

a.



On Sun, Jan 3, 2021 at 11:44 AM José de Abreu <abreubacelar@gmail.com> wrote:
i had supercollider in mind too, since clone makes it easier to have 128 voices around, and this example is something they do in SC tutorials (except the sustain pedal part, but i like this state approach)

and not an overkill since switch~ will help, just a different pattern than relying on poly for tags, clone just works as unique tag per voice out of the box

Em Dom, 3 de jan de 2021 07:16, alfonso santimone <alfonso.santimone@gmail.com> escreveu:
Thanks Jose',
i used a similar approach in SuperCollider with an array of size 128 for all the possible midi notes. Probably I should build some abstractions to deal with array scanning. And to limit the polyphony to given numbers use another array of size 128 with voice numbers tags. I'll see.
I'm doing some experiment with [else/voices] and [else/suspedal] to. Alexandre Torres Porres is doing a very good work with Else lib. 

On Sun, Jan 3, 2021, 01:35 José de Abreu <abreubacelar@gmail.com> wrote:
maybe you can do it without poly at all

you can clone an abstraction 128 times (and use switch~ to make sure the ones without trigger doesn't use your cpu) then voilá, you have one address per note in midi, if you want to retrigger you just... retrigger it, yay

about sustain pedal, i would do this trick: i would create an array with 128 entries and use this: if i press a note, i give the array value 1 at that index, if note off value 0, BUT IF the sustain pedal is pressed instead of giving 0 at note off event, i would give it 2 and prevent the note to die, soo, when i release the pedal i check this array and all the notes that have state 2 will be released. The ones with state 1 i am still pressing so nothing to do. What do you think?

about retriggering, if a note have state 2 and i do a note on, i retrigger it and give the state 1 again so sustain pedal doesn't release it afterwards

this way you don't need poly and bag, but will need clone and a separate interface with arrays and untils to simulate the states of a note (0 for no sound and no press, 1 for pressing, 2 for not pressing but sustained by the pedal and ready to be released)

Em Sáb, 2 de jan de 2021 14:41, alfonso santimone <alfonso.santimone@gmail.com> escreveu:
Thanks Christof!
I surely hope that your proposal will be heard. Those would be essential additions to vanilla's [poly] for polyphonic instrument building.
As for the [bag] object i tried but in the way i built the patch it only works if the sustain pedal is pressed before note on arrives. I have to find a way to make it work the same way when is pressed after a note on.
The same note retriggering is  another essential feature.


On Sat, Jan 2, 2021 at 6:29 PM Christof Ressi <info@christofressi.com> wrote:

Not a direct answer to your question, but I've proposed a few additional features for the [poly] object, including a [sustain( message: https://github.com/pure-data/pure-data/pull/661

For implementing a sustain pedal in Pd vanilla, the [bag] object will probably help. Unfortunately, I don't have time at the moment to come up with a full solution.

Christof

On 02.01.2021 18:07, alfonso santimone wrote:
Hi all,
i'm trying to build a polyphonic voice allocation patch that include sustain pedal (MIDI CC(64) ).
Is there any abstraction that i can look into?
My problems are :

1. How to deal with [poly] when the same note number is received (i.e, three C4 in a row)
[poly] always assign a new voice slot to the incoming notes.
I'm trying to make it assign the same voice slot when the same note number is received consecutively. I guess that i should mess with some arrays keeping track of note numbers and voice slots.

2. How to deal with sustain pedal.
In the "real" world as with keyboard instruments like piano, rhodes etc. the sustain pedal is used in different ways but the most common one is to press the pedal immediately after a chord or note is played and then release it when a new chord is played.
It can be used in more "effect" oriented ways.
Is there any patch or abstraction that i can look into? I guess i should use a combination of [stripnote] and arrays/table/list to keep track of the notes on and off events.
How this can be integrated with a polyphonic voice management with stealing algorithm etc. etc.?


_______________________________________________
Pd-list@lists.iem.at mailing list
UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
_______________________________________________
Pd-list@lists.iem.at mailing list
UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
_______________________________________________
Pd-list@lists.iem.at mailing list
UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
_______________________________________________
Pd-list@lists.iem.at mailing list
UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list