Midi Polyphony / Chord Splitter

Edit: Now solved, please don’t worry! Just a few silly mistakes!

Hi all

I’m a newbie here. I need a little bit of help finishing my first preset (see attachment). Its very simple, just two translators, Note On and Note Off.

I am trying to split the midi polyphony from one channel, and separate it as individual monophonic notes on separate channels on the midi output. Up to 8 notes of polyphony. I’m not trying to do anything fancy regarding note stealing. In an ideal world the lowest note would be outputted on channel 1 and ascending channels up to the highest note.

e.g if there was a 4 note chord on channel 1 of the midi input, for example CEGB
the notes get outputted to channels 1-4 of the midi output in the following way
Channel 1 = C
Channel 2 = E
Channel 3 = G
Channel 4 = B

I’m a first time user of MTP. I’ve spent a number of hours studying @FlorianBome 's preset for Channel Rotation (here). Learning how this sort of thing works. And then had a go at writing my own rules based on what I’ve learnt.

At the moment its not working properly and could do with a bit of help. Currently all Note On messages output messages are being sent with midi note value 0. e.g income midi note 60 is being outputted at 0. Which is obviously not desired. I think its something to do with how I’m dealing with variable notes.

Would any experienced user be able to have a look at my code and push me in the right direction please? Or even finish it off! :wink: Or if such a preset already exists online please do let me know where I can get a copy of it.

Help much appreciated. Thank you!
Nick

chordsplitter v1.bmtp (3.7 KB)

See edit: managed to solve it now! A few silly mistakes. Needs testing properly, but think I’ve got it working now.

1 Like

I’m glad you got it working. I haven’t looked at your project but it sounds a bit tricky. Chord evaluation is not always easy as the user may not press all of the keys at the exact same time which means you have to give a bit of time before evaluating the notes pressed.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve

Thanks for the response. Yes I can see how that could get tricky if you have to code in some sort of buffer time to evaluate the notes. I’ve opted for a simple design, its a first in, first out system. So notes get allocated to channels in the order they’re pressed. Which only if all the notes of the chord are programmed to start together, they get allocated in order of pitch low to high. Quite often I’ll use pre-programmed midi so this is fine for me. But you’re right, if its a pianist playing, the notes will just get assigned to a vacant output channel in the order the keys are held down. I’ve tried various max devices in ableton to do this, but was experiencing big CPU spikes on chord changes causing audio dropouts so not a workable solution.

If anyone is interested, once I’ve done more testing I’ll attach the project here.

Thanks
Nick

1 Like

Hello! I am very interested in splitting chords. I tried some techniques but wasn’t able to do it right. Can you share your solution please?

@prodacerandy , In looks like @nick88 posted the project file with his solution.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Thank you. I thought it was not the final solution according to his latest post

Yes, it looks to me like he edited the post and changed the attachment. If not, chime back in and tag him and maybe he will respond.

Hey @prodancerandy, did you try looking at FlorianBome’s channel rotation template? I think that’s the solution you might be looking for. Incoming notes from chords are outputted on their own channel on a rotating basis.

What exactly are you trying to do?

My own need was very niche so I am not sure that sharing it would be useful to you. In my case, I needed to output chords every time a drum pad was struck. Which involved programming a preset to store each midi note of an incoming chord, a preset to erase the stored chord when it finished. And then additional presets to handle Midi On and Off messages each time the drum pad was struck. e.g striking the drum pad would output whatever chord was stored at that moment in time.

Thanks
Nick

This should do a simple channel rotate of incoming notes to the designated output port.

Channel-Rotate-2022-04-12.bmtp (5.7 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Thank you for your reply! My need is very niche too. I want to make setup like this:

  1. BMT receives some chords from any chord generator/custom written chord progression.
  2. Note numbers are dynamically written to variables in the variables in the Chord note numbers are dynamically recorded in variables and updated when additional notes appear/remove existing notes. Notes are written and dynamically sorted/reordered to variables n1-n9 in the pitch order.
  3. Via the other MIDI port (port#2) I can manually play notes of the current played chord on any octave with the notes C=n1, C#=n2, D=n3, D#=n4. All notes are played with the velocity and shifted to the octaves of the notes played from the port#2.

The result is that you can play any notes of dynamically changing chords from the progression live.

How funny, I actually adapted my original template to pretty much do exactly this! Albeit with a few differences in the way I set it up.

I’ll dm you with the template!

1 Like

Oh it’s always good to encounter musical geeks!

More to say - bettertouchtool latest alpha now supports midi out! And I’ve already implemented aeromouse to act like it’s a drumstick. It needs a lot of calibration but it’s very interesting!

1 Like

Thanks @nick88 !

@prodancerandy
I will consider this closed unless you say otherwise.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz