How does MIDI to CV Poly work?

Hi all.

I found out among the plugins one called “MIDI to CV Poly” that seems intended to “split” an input MIDI chord to 4 separate CV signals.

How does it work exactly? What happens if I have less than 4 notes in the chord? what if i have more?

And is there a “dual” plugin that does the opposite, transforming an input CV signal to a MIDI note message?

The MIDI to CV Poly converts MIDI messages to CV messages and places their pitch and note on/off status on 1 of 4 CV pitch+gate output pairs. There is a single velocity output, which outputs a voltage based on the velocity of the last played MIDI note.

So, how do the notes get routed to the outputs?
-It goes on a priority basis, where every new MIDI note is converted and placed on the first-available CV output pair.
-So if you are already playing 2 notes, they will be on the first 2 output pairs. The next keypress will go to the third output pair.
-If you are already playing 2 notes, then release the first, then the next keypress will go to the first output pair, because it was freed up.
-If you are already playing 4 notes, then the next keypress will overtake the first output pair, then the second, then the third and then the fourth.

About your other question, there is not such a plugin that does CV to MIDI note messages are this time. Something like that can perhaps be done by adressing a CV output to the MINDI plugin though… check this out:

Hope that helps!
// Jesse


Thank you for answering.

So, technically, assuming I’m pressing the keys of a triad chord pratically at the same time, which one goes to output 1, output 2 and output 3 is undefined, right?

You see, what I’m trying to replicate on the Duo is what I’m acheiving now with a wonderful little Python library called MidiDings. Basically I can split a chord in its components, high note to low note, on different MIDI channels in order to live play a section of different instruments (image a violin/viola/cello/double bass quartet).

Unfortunately I don’t think it’s possible with this plugin.

1 Like

I’m not sure if I fully got it.
Yet, I believe that what you are trying to achieve can be done either on the frequencies domain using the CrossOver 2 or on the MIDI domain using the MIDI Keysplit.

Would that help?

I’ll explain it at my best.

Suppose you play a Cmaj7 chord: C/E/G/B. The B will go to channel 1, the G to channel 2, E to 3 and C to 4.

Then there are strategies to handle less than 4 notes. usually “group high” or “group low”. The first strategy would mean that if you play C/E/G, the G will go to both channels 1 and 2, E to 3 and C to 4 (basically the 2 highest channels will play in unison). the second strategy will work exactly the opposite, by coalescing channels 3 and 4 in unison with only 3 notes.

The intent of this becomes apparent if you use a violin instrument on CH1, a viola on CH2, a cello on CH3 and a double bass on CH4. you can play “naturally” a section of arcs (or brass).

It’s a very cool feature of MidiDings. A regular midi split plugin will not work, because the split point(s) is not fixed.


They Keysplit seems to be able to do almost everything what you need except that kind of “smart way” of understanding the code. It simply has a fix treshold.
I think you would need a combination of this with some switch boxes and some sort of smart way to shift according to the chord that you are playing…I’m not sure if I can imagine something for this now, but I will put some though on it :wink:

Well, unfortunately I have zero knowledge about plugin development, but I don’t think it should too much of a hard problem for one interested.

I think a close enough match would be an arpeggiator: it similarly needs to “collect” all played notes and sort them by pitch, but instead of iterating them and outputting them one by one (in the example of a simple UP arpeggiation) it has to output each to a different output port.

1 Like

Interesting idea! TBH I wouln’t be surprised if something like this lingered in the plugin beta section somewhere. It is full of weird (in the best possible way!) stuff.


I have some skills in C++ programming, even if it’s been quite a while since I last did it. now I’m more on web development on other languages. I also know nothing about audio related programming and libraries.

From what I can understand about the code of the MIDI arpeggiator in the repository, it seems it does what I thought: in the run() method among other stuff it “collects” Note On messages, it sorts them and then spits them out according to the arpeggiator mode.

With some, not too much work, it should be relatively easy for some capable guy to transform the code so that the first notes in the array are output in different channels, discarding all real arpeggiation code.

I’d need help to set up a working develop/test environment, or I’d give it a shot myself.