Machinedrum Polyphony / Track + channel rotation ...

Irma77

2019-11-21 14:00:44

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

Steve-Bome Forum Moderator

2019-11-21 17:21:31

comment

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

Irma77

2019-11-21 18:13:47

comment

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

Steve-Bome Forum Moderator

2019-11-21 18:45:18

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

Irma77

2019-11-21 19:05:35

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 ?

Irma77

2019-11-21 19:06:04

comment

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 ?

Steve-Bome Forum Moderator

2019-11-21 19:34:12

comment

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).

Irma77

2019-11-21 22:35:51

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:

Capture d’écran 2019-11-21 à 22.31.14.png

Irma77

2019-11-21 22:44:17

comment

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

Irma77

2019-11-21 23:21:53

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

Steve-Bome Forum Moderator

2019-11-22 01:03:29

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:

rotating-note-example-2019-11-21.bmtp

Irma77

2019-11-22 12:33:09

comment

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 ?

Steve-Bome Forum Moderator

2019-11-22 16:15:02

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:

rotating-note-example-2019-11-22.bmtp

Irma77

2019-11-22 17:54:42

comment

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 ?

Steve-Bome Forum Moderator

2019-11-22 19:10:29

comment

Glad I could help!

Irma77

2019-11-23 10:46:08

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:

Machinedrum.bmtp
Rotate Channel 4.bmtp

Steve-Bome Forum Moderator

2019-11-23 21:18:19

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:

rotating-note-example-2019-11-23.bmtp

Irma77

2019-11-24 14:58:08

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:

MD.bmtp

Steve-Bome Forum Moderator

2019-11-24 15:09:59

comment

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

Steve-Bome Forum Moderator

2019-11-24 15:21:10


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

Irma77

2019-11-24 17:10:37

Re :

I’m trying a lot of thing but it doesn’t work…

It can be quite well if I just had a channel 4 rotating (+CCs) between notes 4 5 6 7

As channel 3 do on this file…

I’m not far of this but cannot code it perfectly.

Really Noobing here.

Thank you a lot for your sympathy Steve !


Attachments:

Machinedrum.bmtp

Steve-Bome Forum Moderator

2019-11-24 20:58:02

OK Try this.

I added an octave offset gd to the initialize global preset.  I changed octave offset to 1 and then all other translators will track to that offset (gd notes).

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


Attachments:

rotating-note-example-2019-11-24.bmtp

Irma77

2019-11-25 02:35:15

Thank you a lot !
Yesterday was a good day !

I understood a bit more, after multiple try I did what you said me to do before as just rename global and it seems to be good now !

I will try to understand the last file you send me because this one is not working, need a level up + few more hours maybe to familiarize with new code lines...

With the file I join here I can play on two channels separately, basic but really cool.

Really happy with this totally new synth, it’s a setup transformation…

I have other ideas now ! Will come back to ask you for sure ! This is really inspirant, bome is freedom...

Thank you a lot dear Steve !


Attachments:

MD 3-4.bmtp

Steve-Bome Forum Moderator

2019-11-25 03:26:23

comment

My pleasure! My aim is to provide examples to build your skills so that you can make your own creative solutions with this awesome software. Steve

Irma77

2019-12-01 17:40:01

Hello again !

Hope you are fine on this sunday !

I’m trying to do a new thing, not very different from the precedent but it is not the same scheme :

Here it is :

I need to rotate between 4 tracks on an Octatrack sampler playing the pitch of the comb filter with note to CC messages.

Each of the four target tracks has it’s own midi channel.I want to play it as a poly “sampler” using time again a note to CC pitch comb filter (CC40)

The trigged note have to be the same for each machine : only one note ((Note 72) which is a C)

Can you help me to do this on the best way. I’m a bit flooded again…

 

Midi input on channel 9 > note 72 x rotation on Channel 9 10 11 12 x CC 40 pitch to CC value)

 

I tried something here but it is not working, I’ve made noise all the night and my head is scratching on this, maybe you can help me again…

 

Here is the file with something I tried the preset is called “Octa Rotate.”

I’ve a kind of rotation but it’s just rotating each 16 channel or something like this. Can you please help me again..

Thank you a lot.


Attachments:

OctaRotate.bmtp

Steve-Bome Forum Moderator

2019-12-01 18:59:41

Hi,

Try the attached,

Translator 5.0 takes the note-on message and sends it to the current output channel (gj+8)

Then translator 5.1 takes the same note-on message and sends the CC  out the same channel as above.

Your rules change the outgoing CC value based on the incoming velocity of the note (gf)

After that, it increments the channel but if it is > 3 then it takes it back to 0.

So essentially the counter is going 0-3 but with adding 8 you are sending to MIDI channels 9-12.

I’m not clear whether you wanted the incoming note velocity to determine the outgoing CC. If not, you can use whatever message that sets the variable gf.

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


Attachments:

OctaRotate-sjc.bmtp

Irma77

2020-03-02 17:52:06

Hi Steve !

Coming back on this project I'm trying to have a rotation between two channels and sending midi CC but I don't know how to do that by the way of one channel only.

I have 7 tracks which are responding to midi Pitch CC's as you helped me to do before.

I can play them from two different channels tracks 1 2 3 4 are responding to notes 0 1 2 3 on channel 1, and on channel2, tracks 5 6 7 are responding to the notes of 4 5 6.

I join here a file than I can use and which work perfectly when I play notes from two channels.

I would like to use this but with only one channel...

I tried to write things like if gx>=3 then Goto "channel2" but CC's are not perfectly responding in rytm...

So if you can please help...

Recapitulate : My interest is for a rotation over notes 0 1 2 3 4 5 6  (C-1 to F#-1) from one midi channel.

The prob is that Notes 4 5 6 are CC responding to midi channel 2.

I think you will understand with this file.

 

Thanks in advance.

Matthias


Attachments:

Poly 4 +3 = 7 .bmtp

Steve-Bome Forum Moderator

2020-03-02 20:20:36

Hi,

So if I understand, you want all notes coming in on MIDI CH 1 and going out on MIDI CH1.

Then goto preset 1 (Rotate Notes 4) and for those two translators under that preset, change the incoming and outgoing channels from 2 to 1.  Done.

 

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

Irma77

2020-03-02 21:07:30

comment

Hi, No sorry the idea was to rotate with one channel over two channels, but the channels are used to split CC's in fact, tracks are reacting as you saw to notes, each track has it's note and real notes sent are converted to CC pitch. Sorry because I'm bad explaining when I have some request or questions. But anyway This preset is useless, because Tuning is not right as I was thinking, so sorry for the useless question and thanks for your help ! I'm trying to make something with different preset you send me for now, I think I will have an other question soon :) Cheers. Mat

Irma77

2020-03-30 21:57:01

Hello Again !

 

I definetly have a problem with this preset :

I simplified it but cannot resolve the CC and note Trigging synchronisation :

CC is always trigged before the destination note...

Can you please take a look ? I would like to have the trigged CC trigged in the same time than the note...

 

Can you help me please ?

Thanks...

 


Attachments:

Not Synced.bmtp

Steve-Bome Forum Moderator

2020-03-30 23:02:25

Hello Again !
I definetly have a problem with this preset :
I simplified it but cannot resolve the CC and note Trigging synchronisation :
CC is always trigged before the destination note...
Can you please take a look ? I would like to have the trigged CC trigged in the same time than the note...
Can you help me please ?
Thanks...

 

 

Hi, MIDI is a serial protocol so if you want the CC to go first, then put the CC translator above the Note translator and modify the math accordingly to calculate the right rotation.

I made an attempt on the attached but not sure I got it exactly as you want.

MT Pro always executes translators from the top down. Output however can be delayed at a translator level so you might have got away with leaving the translators as they were but just delaying the note a few milliseconds to let the CC go first.

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

 


Attachments:

Not-Synced-sjc.bmtp