The polyphonic portamento chalenge
-
- KVRist
- 135 posts since 2 Mar, 2016 from Paris France
Hi friends.
Polyphonic portamento is one of the trickiest logical problem, and I wonder if a solution has been found on any synthesizer yet.
Moving from one 6 note cord to another, trying to play notes as together as possible, I noticed that instead of each note moving to the nearest New note, which would be logical, the sliding is somehow random, notes tend to criss-cross, but I believe it is due to the order in which notes are played. I wonder if a polyphonic portamento mode where the distance between each note of a chord could be taken into account, even with a few milliseconds of calculation if needed, Would be possible at all.
I need that for a Peace I’m working on, and I wouldn’t mind if there was a delay to calculate the smartest move between one cord and the next one, because I’m using a patch with a very slow attack anyway. I could of course make six monophonic tracks, but I want to do it live you see. What do you think?
Attached is a small audio example which I made using 6 monophonic tracks with Surge XT. I have other virtual synthesizers, U-HE Diva and Hives, and Serum, but none of them have the fancy voice portamento allocation system that would allow this effect I'm looking for as far as I know.
Polyphonic portamento is one of the trickiest logical problem, and I wonder if a solution has been found on any synthesizer yet.
Moving from one 6 note cord to another, trying to play notes as together as possible, I noticed that instead of each note moving to the nearest New note, which would be logical, the sliding is somehow random, notes tend to criss-cross, but I believe it is due to the order in which notes are played. I wonder if a polyphonic portamento mode where the distance between each note of a chord could be taken into account, even with a few milliseconds of calculation if needed, Would be possible at all.
I need that for a Peace I’m working on, and I wouldn’t mind if there was a delay to calculate the smartest move between one cord and the next one, because I’m using a patch with a very slow attack anyway. I could of course make six monophonic tracks, but I want to do it live you see. What do you think?
Attached is a small audio example which I made using 6 monophonic tracks with Surge XT. I have other virtual synthesizers, U-HE Diva and Hives, and Serum, but none of them have the fancy voice portamento allocation system that would allow this effect I'm looking for as far as I know.
You do not have the required permissions to view the files attached to this post.
-
- KVRian
- 900 posts since 12 Sep, 2007
Sounds like an MPE capable synth might be a good solution.
I believe there should be a way to quantize your pitches, maybe the first note pressed controls all pitch bends. That's only possible in MPE land.
Also you could consider Gigperformer or even plugin guru Unify. They both have massive midi and CC control capabilities.
I believe there should be a way to quantize your pitches, maybe the first note pressed controls all pitch bends. That's only possible in MPE land.
Also you could consider Gigperformer or even plugin guru Unify. They both have massive midi and CC control capabilities.
- KVRian
- 605 posts since 20 Mar, 2015 from Nerima, Tokyo
In ableton live, you can edit MPE curves in the midi, and several stock synths are mpe compatible.
Makes these kind of slides a no brainer.
For live performance though, not so simple^^
Makes these kind of slides a no brainer.
For live performance though, not so simple^^
-
- KVRAF
- 1887 posts since 8 Jan, 2022
Fluid Chords is basically a polyphonic pitch bender.
You'll need to use the internal synth on the latest version or an MPE capable synth.
Most of Ableton's synths allow for polyphonic pitch bending.
Serum 2 allows you to edit pitch bends in the clip editor.
You'll need to use the internal synth on the latest version or an MPE capable synth.
Most of Ableton's synths allow for polyphonic pitch bending.
Serum 2 allows you to edit pitch bends in the clip editor.
- KVRAF
- 24411 posts since 7 Jan, 2009 from Croatia
Note that OP wants to do this playing live, not by drawing in piano roll.
-
- KVRist
- Topic Starter
- 135 posts since 2 Mar, 2016 from Paris France
Just had an idea.
For my live performances, I'm using mainstage on Mac.
I would play my 1st chord, hold it with the sustain pedal, and then play the next chord, but the cord would not play until the sustain pedal is released, giving the time for notes to be sorted from lowest to highest. With this be doable with a mainstage script? And would it solve my problem anyway, because the synth I am using would also have 2 allocate notes from lowest to highest to the same voices.
Any idea?
Thanks.
For my live performances, I'm using mainstage on Mac.
I would play my 1st chord, hold it with the sustain pedal, and then play the next chord, but the cord would not play until the sustain pedal is released, giving the time for notes to be sorted from lowest to highest. With this be doable with a mainstage script? And would it solve my problem anyway, because the synth I am using would also have 2 allocate notes from lowest to highest to the same voices.
Any idea?
Thanks.
- KVRAF
- 24411 posts since 7 Jan, 2009 from Croatia
This should actually be quite doable with a Kontakt multiscript, too. Even better if it assigns every voice to its own MIDI channel, then you can control up to 16 monosynths, regardless of how they do voice allocation it should work fine if they are set to mono legato with glide...
It would have to add a bit of latency to sort the notes on the first chord you play, too.
It would have to add a bit of latency to sort the notes on the first chord you play, too.
-
- KVRist
- Topic Starter
- 135 posts since 2 Mar, 2016 from Paris France
Thanks Dragon.EvilDragon wrote: Thu Sep 25, 2025 7:47 am This should actually be quite doable with a Kontakt multiscript, too. Even better if it assigns every voice to its own MIDI channel, then you can control up to 16 monosynths, regardless of how they do voice allocation it should work fine if they are set to mono legato with glide...
that is really interesting. Do you know who could write such a script for me? And then I would have to look for the right Kontakt library, unless I could control Surge XT with the script.
- KVRAF
- 24411 posts since 7 Jan, 2009 from Croatia
I can give it a shot when I have some free time.
You don't need a Kontakt library, Kontakt can send MIDI out to other plugins. Unsure if this works with AU in Mainstage, though...
You don't need a Kontakt library, Kontakt can send MIDI out to other plugins. Unsure if this works with AU in Mainstage, though...
-
- KVRist
- Topic Starter
- 135 posts since 2 Mar, 2016 from Paris France
Okay. Hold on then. I see if I can ask chat GPT to write a mainstage MIDI script for me. All I need to tell it to do is to assign MIDI channels according to note number right? I hope I can find a clear way to formulate this.
- u-he
- 30189 posts since 8 Aug, 2002 from Berlin
In my work as a developer of synths with polyphonic portamento, I have thought about this a lot. But I have not found a good solution. I call it the "chord glide dilemma".
The problem is not so much mathematical as it is physical. When a Note On Event hits the voice logic of a synth, it can not make any predictions about future Note Ons. The voice logic has to decide on the spot, where the pitch of that voice starts from. If another Note On arrives a few milliseconds later, we can't simply renegotiate which voice starts where. That is because the first voice is already heard, and a renegotiation of the portamento starting point could easily mean a sudden jump in pitch. A sudden jump in pitch is an audible artefact, commonly considered a glitch or bug in this case.
I'm not sure any method that involves accumulating notes first, e.g. by the hold pedal, then triggering the portamento is going to be easily implemented or easily usable.
I could think of a solution if the notes are always played in the same sequence. Like, if the chord is always played lowest to highest or vice versa. Let me know if this was an acceptable restriction to the technique.
(in that case, our software should never be crossing pitches btw., but it does not initially preserve the chord)
The problem is not so much mathematical as it is physical. When a Note On Event hits the voice logic of a synth, it can not make any predictions about future Note Ons. The voice logic has to decide on the spot, where the pitch of that voice starts from. If another Note On arrives a few milliseconds later, we can't simply renegotiate which voice starts where. That is because the first voice is already heard, and a renegotiation of the portamento starting point could easily mean a sudden jump in pitch. A sudden jump in pitch is an audible artefact, commonly considered a glitch or bug in this case.
I'm not sure any method that involves accumulating notes first, e.g. by the hold pedal, then triggering the portamento is going to be easily implemented or easily usable.
I could think of a solution if the notes are always played in the same sequence. Like, if the chord is always played lowest to highest or vice versa. Let me know if this was an acceptable restriction to the technique.
(in that case, our software should never be crossing pitches btw., but it does not initially preserve the chord)
- KVRAF
- 24411 posts since 7 Jan, 2009 from Croatia
It is all doable if a bit of latency is accepted on note input (15 ms or so), which allows for buffering chords and then sorting the notes in that buffer. If the sound is a slow attack pad it is more than acceptable.
Another method would be if a voice card based synth would have a reassign (as opposed to rotate) voice assignment that starts reassigning from voice 1 as soon as you lift all keys (as opposed to reassigning a voice only if you play the same key twice while the voice of that same key played previously is still decaying).
Another method would be if a voice card based synth would have a reassign (as opposed to rotate) voice assignment that starts reassigning from voice 1 as soon as you lift all keys (as opposed to reassigning a voice only if you play the same key twice while the voice of that same key played previously is still decaying).
-
- KVRist
- Topic Starter
- 135 posts since 2 Mar, 2016 from Paris France
@Urs,Urs wrote: Thu Sep 25, 2025 9:06 am
I could think of a solution if the notes are always played in the same sequence. Like, if the chord is always played lowest to highest or vice versa. Let me know if this was an acceptable restriction to the technique.
yes, playing chords in a slightly arpeggiated way like from lowest to highest is an acceptable solution, although it requires a bit of discipline. Also consider evil dragons comment which I think is something to dig into.
Diva and Hives don't offer these possibilities for the moment anyway, but I would love that to happen in future updates, even if just a few users will find an interest for it.
Best regards,
Last edited by jprykiel on Thu Sep 25, 2025 12:16 pm, edited 1 time in total.
-
- KVRist
- Topic Starter
- 135 posts since 2 Mar, 2016 from Paris France
You may well be right.EvilDragon wrote: Thu Sep 25, 2025 9:22 am It is all doable if a bit of latency is accepted on note input (15 ms or so), which allows for buffering chords and then sorting the notes in that buffer. If the sound is a slow attack pad it is more than acceptable.
Another method would be if a voice card based synth would have a reassign (as opposed to rotate) voice assignment that starts reassigning from voice 1 as soon as you lift all keys (as opposed to reassigning a voice only if you play the same key twice while the voice of that same key played previously is still decaying).
- KVRAF
- 9546 posts since 6 Jan, 2017 from Outer Space
Consider playing the portamento itself. With a LinnStrument you can practice to move complete chords. Or with a Erae touch you can even make it with your own layout. New ideas might need new instruments.
On the other hand its an interesting challenge as Urs pointed out. I would try to do that with that buffer idea in PlugData if a MPE controller to play it isn’t an option…
On the other hand its an interesting challenge as Urs pointed out. I would try to do that with that buffer idea in PlugData if a MPE controller to play it isn’t an option…
