Machinedrum Polyphony / Track + channel rotation ...

Hello there,

I would like to know if it is possible to create a preset to play my machinedrum as a polyphonic synth ?

Machinedrum has 16 tracks which are distributed over 4 midi channels.

Each track/machine is trigged from one choosen note over the selected midi channel (track 9 10 11 12 channel 3, tracks 13 14 15 16 channel 4)

I set my machinedrum to respond to channels 3 and 4, using the tracks 9 to 16 as a poly synth. (I allready can play those tracks translating keys to CC and trigging each track/machine with all notes but I want now to rotate the messages to play polyphony)

So : I parameter Tracks 9 10 11 12 (channel 3) to be trigged from notes C1 C#1 D1 D#1

And Tracks 13 14 15 16 (midi channel 4) to be trigged from notes E1 F1 F#1 G1

That's all the way machinedrum is working.

Track 9 10 11 12 pitch are responding respectively to CC to CC16 CC40 CC72 CC96 on Chan3

Track 13 14 15 16 pitch are responding respectively to CC to CC16 CC40 CC72 CC96 on Chan4

I allready used play Machinedrum as a synth but not polyphonic : to do this I created some preset in Bome Midi translator saying for example that "each note playing on Channel 3 will trig note C1, then I made in the same preset some preset saying that (for example Note C3 will trigger the Pitch#CC Corresponding to the note played) Then Any note played on Channel 3 is playing the Pitch-#CC value corresponding the key I press + Trig the note C1 which is triggin the Track.

The thing I want now to do is to use the Machinedrum as a polysynth.

So I should add some preset saying that if I play a chord, The target tracks have to rotate.

If I play M7(9) chord I want a trig rotating C1 C#1 D1 D#1 (tracks 9 10 11 12 channel 3)respective CCPitch and E1 F1 F#1 G1 (tracks 13 14 15 16 on channel4) + respective CCPitch

as If I trig from channel 4 I want the same thing.

 

Maybe you understand ? Can you help me setting this, I can write the CC correspondance Note to CC because I need to use my tuning table with each CC value corresponding to the key pressed, but can you please create me a rotation preset between my two chosen channels (3,4) and notes C1 to G1 ?

I parameter Tracks 9 10 11 12 (channel 3) to be trigged from notes C1 C#1 D1 D#1

And Tracks 13 14 15 16 (midi channel 4) to be trigged from notes E1 F1 F#1 G1

Will really pleased to talk with you.

 

Hope you won't have an headache.

 

Thank you and congratulations for reading.

 

See you.

 

Matthias

Let me try and net out what you want to do.
If you play individual notes, no change.
If you play a chord, once C, C#, D, D# sent on MIDI Channel 3.
If you play another chord E F F# G sent on MIDI Channel 4
and the above 2 continue to rotate.
Do you want all notes to stop sounding when any of the chord keys are release or only when you release them all?
What behavior are you looking for if another note is added to the chord?
Do you define a chord as 2 or more notes down at the same time, or 3 or 4?
I know 2 is technically an “interval” but maybe not in this context.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

Hello !
Thank you for the answer !
I just made a mistake the mapped notes I choose in the machinedrum to trig tracks are not C1 to G1, they are C-1 to G-1 (because I won’t never play them)
My english is not very goods so thank you for your help.
There are many possibilities I know that !
And to answer you : I have no master keyboard, I only sequence with some sequencer tracks. I can assign one or two sequencer tracks to channel 3 and same to channel 4, on each track I can write 4 notes chord, but I also have an other sequencer/ chord matrix (boss dr5) which can send chords with more than 4 notes).
(I do not know what is the best technical choice about the number of notes in the chord, sometimes I want to play independent note on those tracks maybe like an arpege, with one note starting on chan 3 then some steps after an other note will be trigged on channel 4 and Then I wil place a trig of 4 notes on channel 3 and I would like to keep hearing the note on channel 4 to have a 5 note chord, because this can create movement) blabla)
So I just want the note stop sounding when the trig length is released, I can write on the sequencer the length of the chord trig, (all note of the chord releasing at the same time)
I think I define chords as 3 or more note tho ! because yes in other way It can be interesting to play those tracks with arpèges two. ^^
I think we understand a bit, ? I’m really happy about if this is the case !
Thank you a lot for your knowledge and patience.
Matthias

OK, so there are a few observations that might help.

  1. You need to identify when a chord is played. You can do this for incrementing a global variable every time you receive a note-on and decrementing the same global variable when you receive a note off. If the global variable is 3 or more then you can trigger a timer to indicate you have an incoming chord.
  2. You have to know what notes are played within the chord and what channel you what to send them, so that you can send the corresponding note-off messages when you are no longer playing the chord (when the global variable used in step 1 above falls below 3. Since you are only sending 4 notes (with CC pitch), you could do this as a bit map with another global variable. You shouldn’t have to worry about the pitch since it will track with one of the 4 notes being released. So say bit 0 is C bit 1 is C# bit 2 is D and bit 3 is D#. You then iterate through these bits turning off the respective note (with a timer), to the MIDI channel in which they were played. Oh yes, you may want to define a bit to determine which channel they were sent so that when you turn them off, you are sending the note-off message to the same channel (so you don’t have hung notes).
  3. You need to determine the logic on when to switch outgoing MIDI channels (do you switch when all notes are released or when a partial chord is released? What do you want done with the remaining notes being played?) You use a global variable to toggle between the 2 outgoing channels at the appropriate time.
  4. The more notes you use in defining a chord, the more work you will have to do to turn-off playing notes at the appropriate time and the logic to switch channels.
  5. You have to account for the situation when perhaps you are playing an arpeggio and you have a few notes overlapping (you press the next note slightly before you release the last note). I would think this would be in your single note handling translators.

I suggest to ensure you have the logic correct you set up a high level flow diagram of the behavior you want prior to coding. This can save you a lot of time while you are deep into coding to keep everything straight in your head.

I hope this helps provide the proper guidance.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

Dammit it look so complex …

I already am able to play alone tracks chromatically triggin it’s note + it’s midi channel + the CC corresponding to the note I play.

Saying I just want to do this one one midi channel, rotating 4 tracks. Isn’t it a simple function to make this rotation ?

Dammit it look so complex …
I already am able to play alone tracks chromatically triggin it’s note + it’s midi channel + the CC corresponding to the note I play.
Saying I just want to do this one one midi channel, rotating 4 tracks. Isn’t it a simple function to make this rotation ?
In fact it just have to rotate the target note between 4 target… Saying I just want 4 note chord…
Is it about timer function ?

The main thing that makes it more complex is the function to analyze chords and then the associated notes with those chords. The function to rotate which MIDI channels they go out is much easier, You simply rotate the MIDI channel on each chord trigger.
As far as rotating tracks, I’m not sure what you mean unless you consider each track a different note number in which case sending out 4 note numbers with associated CCs is fairly straight forward once you figure out what note numbers and CC’s you want to send and when (depending on the incoming chord).

here is a page of the manual

 

The fact is that I allready trig track sounds + Create a note to Pitch CC conversion.

I just need to rotate between 4 target notes (C-1 C#-1 D-1 D#-1) each time I play a note on my keyboard.

You said me \"rotating each note between channel is easy\"

How can I do that ?

Can I as easily rotate between 4 target note ?


Attachments:
![](upload://xeMN3Zwe1pXuHeucLDWll3yfnnE.png)

Yes it’s exactly that : But how can I rotate the CC indicating the pitch ?
When I create a setting in bome midi translator I create two things :
1- The fact that Any note will trig note C-1
2- The fact that Any note will trig it’s CC pitch Equivalent.
but this is working for just one track (activated as C-1)
what I want is to rotate the CC pitch information between C-1 C#-1 D-1 D#-1 and rotation

Can I make a CC pitch rotating to other channels, as if it was a note rotating ?

I’m not sure if this is what you want but this example will take any note in and rotated notes out on MIDI channel 3 between notes 0-4.

The first translator rotates the note numbers on note-on

The second translator sends associated CC with the note-on but I don’t know what CC you want. You might have to add rules to change the CC# or the variable amount.

It does not handle note off, however, as I’m not sure how you want to handle that. You could either do this with a timer with a fixed length or trigger it with a note off message. You may need to calculate which note to turn off based on the note rotation, which note to turn off, however.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz


Attachments:
1574381004905_rotating-note-example-2019-11-21.bmtp

Amazing seriously, thank you a lot !
It’s what I want : rotation between 0 and 4 ! So happy
But
1
pitchs CCs are not the same on each (track-notes 0 1 2 3)
Channel 3 (tracks 0 1 2 3) have 4 CC for pitch :
note 0 : CC16
note 1 :CC40
note 2 :CC72
note 3 : CC96
How can I rotate between this 4 CC’s ?
Here is the implementation.
https://medias.audiofanzine.com/images/thumbs3/2808311.png
2*The CC have a particular implementation, There is no precise rules in the Note to CC Value chart:
https://medias.audiofanzine.com/images/normal/2808331.png or https://medias.audiofanzine.com/images/normal/2808314.png (sometime I would like to change the machines BD XT ROM etc and maybe do the same trick on Channel 4 with note 4 5 6 7)
Some machines are playable on two octave, some on more (selected column is just an example)
How can I write this, I think I cannot write rules here ?
If not What is (please) the code line which will be saying to rotate one CC to the other track ?

Hi,

See the above modified project file.

The second translators has additional rule based on which note. I’m not sure if this is what you want exactly but the structure should give you an idea and you can modify accordingly.

Basically, we determine whether note 1, note 2 note 3 or note 4 and go to a separate section where we set the cc#. Then we look at the note value (0-1 as examples) and set the associated desired outgoing cc value from there as local variable rr.

If you want to do something similar for channel 4, then just duplicate the translators once you are done and change the global variables for something unused to rotate channel 4 output.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz


Attachments:
1574435701063_rotating-note-example-2019-11-22.bmtp

Steve Thank You so much !
Bome is really amazing, I’m really appreciating your help as I can now do what I want.
I didn’t understood everything but the file you send me there + indication you write are perfect !
I can now play different machines, chords, everything is perfect thank you a lot, this is so perfect.
What is the global variable ?
Should I change each line with for example gc = note rr = CCvalue ?
and change the gb to gc ?

Glad I could help!

Glad I could help!


Thank you a lot.
Can you tell me how exactly I can do the same for channel 4 please ?

I know you explained me to change the global variable but I do not understand…

I tried to change midi channels, but maybe it is about the gb/gc ? Maybe you can be one time again super sympa :hap:

An other thing : Is it possible to do a rotation between two rotating group ? Like channel 3 and 4. With first trig 0 1 2 3 and then 4 5 6 7, rotating ?

Thank you for all …

 

 


Attachments:
1574502075884_Machinedrum.bmtp
1574502314728_Rotate-Channel-4.bmtp

OK, I’ve modified the last file as follows:

Added a preset for Init that has 2 translators. The first one fires a timer “init”. The second one is the incoming init timer where we set our used global variables. Even though they probably don’t need setting, it is still handy to do this to document what you have used in one place for future reference.

The second preset, I’ve modified the first 2 translators to only look at incoming notes 0-3 and to ignore everything else.

The second 2 translators look for notes 4-7 only. We use gc instead of ga for the rotating function for this channel. Everything here goes out MIDI Channel 4. All other rules are unchanged other than looking for different incoming note and using a different rotating counter variable.

You might need to change some of these rules if you use different CC for instance for this MIDI CH. Like before, it is just a template.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz


Attachments:
1574540296233_rotating-note-example-2019-11-23.bmtp

Hi Steve,

Thank you again for your precious help but this is not working !
You write :
“The second preset, I’ve modified the first 2 translators to only look at incoming notes 0-3 and to ignore everything else.”
But it not the idea I think : All note from channel 3 have to trig 0 1 2 3 in rotation. Playing CC according to pressed Key.

It is not triggin anymore, even on very low octave when I press C-1 to G-1 and so CC’s are not played accordingly because CCs just react to 4 octave (as on the tuning table I joined before)

Here is the last file (CC’s added)

Didn’t understand


Attachments:
1574603660766_MD.bmtp

It is possible that things are off by one octave. There is no MIDI standard for note names (ie C-1). So I use absolute note numbers instead.
In some systems C-2 is note 0 and in other C-1 is note 0

Try checking for +12 above what I put in my last file and see if that works
So for the first instead of:
if gb>3 then exit rules skip outgoing action
it would be :
if gb15 then exit rules, skip outgoing action
For the second it would be:
if gb19 then exit rules, skip outgoing action

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz


It is possible that things are off by one octave. There is no MIDI standard for note names (ie C-1). So I use absolute note numbers instead.
In some systems C-2 is note 0 and in other C-1 is note 0

Try checking for +12 above what I put in my last file and see if that works
So for the first (C-D#) instead of:
if gb>3 then exit rules skip outgoing action
it would be :
if gb<12 then exit rules, skip outgoing action if gb>15 then exit rules, skip outgoing action
if gb>15 then exit rules, skip outgoing action if gb>15 then exit rules, skip outgoing action
For the second (E-G) it would be:
if gb<16 then exit rules, skip outgoing action if gb>19 then exit rules, skip outgoing action
if gb>19 then exit rules, skip outgoing action if gb>19 then exit rules, skip outgoing action

Basically adding 12 (or one octave) to the original

Posting again here since my answer got munged in the comment I did by this forum software.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz