Splitting polyphonic material to multiple voices

Official support for: thepiz.org
Post Reply New Topic
RELATED
PRODUCTS

Post

[Talking about midiPolyphony]
First of all congratulations for this great tool.

I'm trying to use it to drive 4 virtual instruments for human voices: Soprano, Alto, Tenor, Bass.
The goal is just to play a chord and automatically map it to the SATB channels.

The pb is that when the chord is played the notes are not exactly played in the S, then A then T then B order. Thus midiPolyphony will not assign the lowest note to the bass Midi channel, ... unles I've missed sommething ?

Is there a mode that could accomplish this (I'm perfectly aware that this is not as trivial as it seems) ?

Regards,
Thibault
Last edited by lemeur on Mon Nov 08, 2010 9:39 pm, edited 1 time in total.

Post

midiPolyphony can't do that, unfortunately. yes, i think it is more tricky than it sounds. if you play a chord one note at a time, the plugin doesn't know if the next note is going to be higher or lower than the first one.

just brainstorming here... for it to work, it would need:
- an allowed note range for each output channel
- some way to deal with overlapping ranges, maybe using the center of each range to prioritize notes, and/or assigning a preferred order of channels
- to keep track of the last sent note on each channel to avoid weird jumps between voices?

but doing it in real time will always require some guesswork by the plugin, which will sometimes be "wrong"... anyway, this would be a useful thing and i will probably attempt it sometime.
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

insertpizhere wrote:just brainstorming here... for it to work, it would need:
- an allowed note range for each output channel
Yes, this would be necessary.
An extra possible option would be to transpose an output channel from +/- n octave(s).
insertpizhere wrote: - some way to deal with overlapping ranges, maybe using the center of each range to prioritize notes, and/or assigning a preferred order of channels
I agree.
Another data that could help in choosing the channel to put the note into, would be to compare it with the previous note of each channel: indeed if a new note is "next" to a previous one, we could assume that they are part of the same melody and should remain in the same channel.
insertpizhere wrote: - to keep track of the last sent note on each channel to avoid weird jumps between voices?
Yes, indeed.
insertpizhere wrote: but doing it in real time will always require some guesswork by the plugin, which will sometimes be "wrong"...
Yes, but I think this could be acceptable, especially if the plugin is customizable: in this case the setup should be adapted to each music sequence.


Another issue is that sometimes a voice will have no note to play. This makes the algorithm to select the output voice a little more difficult (analysing the melody of each part).
This also leads to a pb in detecting when the chord is fully played: the plugin need to wait a given amount of time (because all notes are not entered exactly at the same time).

insertpizhere wrote: anyway, this would be a useful thing and i will probably attempt it sometime
I was thinking in trying to implement it as a JesuSonic script in Reaper because I have no experience (nor code examples) of VST developpments. However I'm not sure if JS will be fast enough for such processing.

By the way, is the source code of midiPolyphony available or not ?

Thibault

Post

(just split this discussion to a new topic)

i did upload the source of midiPolyphony (which is ridiculously complicated): http://thepiz.org/pizmidi/midiPolyphony_src.zip

but i also started on a dedicated plugin for this. i can get it to split things like Bach chorales almost perfectly if the ranges for each channel are set right. after some more testing i'll upload that...
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

insertpizhere wrote:i did upload the source of midiPolyphony (which is ridiculously complicated): http://thepiz.org/pizmidi/midiPolyphony_src.zip
Many thanks for sharing this know-how with us.
Opensource is my passion, so I really appreciate this.

insertpizhere wrote: but i also started on a dedicated plugin for this. i can get it to split things like Bach chorales almost perfectly if the ranges for each channel are set right. after some more testing i'll upload that...
Hey man, you're the fastest VST dev on the Net !
I'll be your first beta tester then ;-)

Keep us updated,
Regards,
Thibault

Post

here it is:
http://thepiz.org/pizmidi/midiChordSplit.zip

i would like to think of a better name that more accurately describes it... is there one word that implies the act of intelligently splitting polyphonic material among multiple voices?

anyway, this is how it works:
the note ranges for the channels should be arranged from lowest to highest for best results. by default it starts with the settings for "Jesu, meine Freude" by JS Bach.

in each processing block, it looks to see which notes will be played. if it sees that there are fewer notes than the total available polyphony, it will try to follow the melody for each channel. otherwise it just fills the voices from the bottom up.

it's still not smart enough to deal with some things, but i'm going to keep working on it...
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

insertpizhere wrote:here it is:
http://thepiz.org/pizmidi/midiChordSplit.zip
Humm, I can't unzip the file... it seems corrupted.
insertpizhere wrote: i would like to think of a better name that more accurately describes it... is there one word that implies the act of intelligently splitting polyphonic material among multiple voices?
I'm not a native English speaker [Oh... what a surprise! ;-)] and i can't think of a better name for now...
insertpizhere wrote: anyway, this is how it works:
the note ranges for the channels should be arranged from lowest to highest for best results. by default it starts with the settings for "Jesu, meine Freude" by JS Bach.

in each processing block, it looks to see which notes will be played. if it sees that there are fewer notes than the total available polyphony, it will try to follow the melody for each channel. otherwise it just fills the voices from the bottom up.
You're amazing!! I'm a little jealous... I would have really liked to help implementing this ;-)
insertpizhere wrote: it's still not smart enough to deal with some things, but i'm going to keep working on it...
Do you think you will release the source code for this one? I'm very interrested in analysing the "follow melody" allgorithm.

Again many thanks for you wonderful work.
I'll test as soon as possible.

Regards,
Thibault

Post

for kontakt, you can achieve something similar using this new "tool":
http://rekkerd.org/cinesamples-cinemap- ... -kontakt-4

This is something I'm concerned with, too. Something like a chorder but spread across different midi channels and key ranges.
I find this VST very useful: http://www.kvraudio.com/get/1945.html
it's a bit limited but you can achieve some complex orchestra chords with a single key.

piz: i've got to check your little tool, as it seems different from that chord-helper.

Post

i uploaded it again, should work now.
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

lemeur wrote:Do you think you will release the source code for this one? I'm very interrested in analysing the "follow melody" allgorithm.
yes, the source code for all my plugins is available by request. i'll upload this one soon. as for the algorithm, there isn't much to it, it just sends each new note on the channel that previously sent a note closest to the new note.
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

I've tested it quickly and it is already very useful tool.
I use it by playing live on a very basic and inconvenient keyboard for this kind of stuff (nanoKey), and yet with midiChordSplit you can achieve a lot.

I've tested it with Kontakt4 and default settings for now: Bass singing Ah, Tenor Eh, Alto i, and Soprano Oh. This made it easier to check which note was assigne to which channel.

It is true that sometimes it doesn't assign the note to the channel I was expected, but I guess this has to do with the range of each voice I haven't tweaked. Otherwise this is already a wonderful tool.

However, I found that pressing the C2 key with midiChordSplit active always makes my Reaper to crash. If I disable midiChordSplit it works fine (with default settings)... Maybe a bug ?

insertpizhere wrote:yes, the source code for all my plugins is available by request. i'll upload this one soon. as for the algorithm, there isn't much to it, it just sends each new note on the channel that previously sent a note closest to the new note.
k, thanks.
Thibault

Post

the crash was because i forgot to deal with notes outside every channel's range... fixed now.
http://thepiz.org/pizmidi/midiChordSplit.zip
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post

insertpizhere wrote:the crash was because i forgot to deal with notes outside every channel's range... fixed now.
http://thepiz.org/pizmidi/midiChordSplit.zip
Thanks, I confirm it fixes the crash problem.

It's working wuite well though sometimes it seems to forget a note-Off event (or maybe send it to an incorrect channel).
I've had the pb with my settings (ranges for EWQL Symphonic Choirs) where the voices share several sub-ranges: maybe this is due to this (the note off beeing sent to the incorrect channel ?)

I can't reproduce this each time, otherwise I would have posted a midi file :-(

Thanks for this very useful tool.

Thibault

Post

You can't automate such process.

Here is the only and best way : http://thurly.net/0acx

Post

beautiful :D

Post Reply

Return to “Insert Piz Here”