Step sequencing with MT

metastatik

2008-02-27 17:15:14

So I’ve built a couple step sequencers with MT Author and they work great. The one I’m working on right now is a 16 step modulation sequencer. Each step sends out the same CC just with different values and I can adjust these values with an encoder.

I have MT receiving MIDI clock from Live like so…

Code: Select all

Translator 3: Timing1/16th(GA)
Options: stop=false
Incoming: MIDI f8 
Rules: 
  ga=1+ga
  if ga>96 then ga=1
Outgoing: (none)
Here’s an example of the first 2 steps…

Code: Select all

Translator 1: Step1
Options: stop=false
Incoming: MIDI f8 
Rules: 
  if ga!=1 then exit rules, skip Outgoing Action
  if gu<1 then exit rules, skip Outgoing Action
Outgoing: MIDI b0 37 ge 

Translator 4: Step2
Options: stop=false
Incoming: MIDI f8 
Rules: 
  if ga!=7 then exit rules, skip Outgoing Action
  if gv<1 then exit rules, skip Outgoing Action
Outgoing: MIDI b0 37 gf
The gu and gv variables are set by pads on my controller. Basically used as on/off switch for each step.

This all works well, but I’d like to have the option of smoothing the transition between each step. So instead of jumping from the ge value to the gf value, it fades between the two.

I can sort of do this, but it’s dependent upon the difference in value between 2 steps. Here’s an example of the 2 sub-steps between Step 1 and 2. The hz variable is used to turn smoothing on or off.

Code: Select all

Translator 2: Step1a
Options: stop=false
Incoming: MIDI f8 
Rules: 
  if hz<1 then exit rules, skip Outgoing Action
  if ga!=2 then exit rules, skip Outgoing Action
  if gu<1 then exit rules, skip Outgoing Action
  if ge>gf then pp=ge-gf
  if ge>gf then qq=pp/5
  if ge>gf then hc=ge-qq
  if ge<gf then pp=gf-ge
  if ge<gf then qq=pp/5
  if ge<gf then hc=ge+qq
Outgoing: MIDI b0 37 hc 

Translator 3: Step1b
Options: stop=false
Incoming: MIDI f8 
Rules: 
  if hz<1 then exit rules, skip Outgoing Action
  if ga<3 then exit rules, skip Outgoing Action
  if ga>6 then exit rules, skip Outgoing Action
  if gu<1 then exit rules, skip Outgoing Action
  if ge>gf then pp=ge-gf
  if ge>gf then qq=pp/5
  if ge>gf then hc=hc-qq
  if ge<gf then pp=gf-ge
  if ge<gf then qq=pp/5
  if ge<gf then hc=hc+qq
Outgoing: MIDI b0 37 hc
The problem there is that if the difference between ge and gf is less than 5, the pp/5 calculation will result in 0. This isn’t a major deal, but the sequencer can run at 4 speeds; 1/4, 1/8, 1/16 and 1/32. At 1/16th notes, there are 6 clicks per step (5 clicks in between in step). At ¼ notes, there are 24 clicks per step (23 between each step). So for ¼ notes, I’d be using pp/23, which won’t work if the difference between ge and gf is less than 23. More often than not, the difference between 2 steps will be much less than 23.

Any ideas on how I could handle this differently? Thanks in advance for any insight.

joesapo

2008-02-29 22:11:01

Wow! You don't mess around do you... :D

That's pretty impressive work you've done. I may have to try this out myself sometime. Sorry it took so long to respond to your post, but I needed some time to let all this process...

So let me get this straight; you are using this as a step sequencer for note values that are all the same CC? What I'm visualizing here is that you're trying to recreate the step sequencer on a TB-303 or similar and you are trying to re-create the 'glide?'

You present a difficult problem... My first instinct would be to tell you to increase the resolution of your input clock value. You're operating currently using values of 96. Perhaps if you multiply your timing value by 4 or so and adjust your calculations accordingly you'll be able to get what you're looking for?

Passed that I'm not sure I'd be able to help much without actually taking a look at / playing with your template. If you like, I'd be more than happy to load this up and check it out.

Again, very impressive what you've done with MT Author. I'm sure that, seeing what you've already accomplished so far, it's only a matter of time before you solve this.

Joe

metastatik

2008-03-02 20:10:11

Hi Joe,

I really appreciate the response and my apologies for the delay in getting back to you.
So let me get this straight; you are using this as a step sequencer for note values that are all the same CC? What I'm visualizing here is that you're trying to recreate the step sequencer on a TB-303 or similar and you are trying to re-create the 'glide?'
I’d like to try that, but the current project simply sends out CCs for modulating parameters in Live. It’s loosely based on the mod sequencer in the Korg Radias…well, at least from what I’ve read about it, never tried it myself.
You present a difficult problem... My first instinct would be to tell you to increase the resolution of your input clock value. You're operating currently using values of 96. Perhaps if you multiply your timing value by 4 or so and adjust your calculations accordingly you'll be able to get what you're looking for?
I’m not sure how I would accomplish that. The clock that I’m receiving is being sent from Live and there are only 24 ticks per ¼ note. The 96 comes from the number of ticks required to get sixteen 1/16th notes (a 1/16th note=6 clock ticks). For the other speeds it runs at (1/4, 1/8 and 1/32) a different number of ticks is required. For example, to get sixteen ¼ notes, I need 384 ticks (a ¼ note=24 ticks).

I’ve uploaded the project here, so you can take a look at it. I have Live sending MIDI clock out to Yoke Port 2 and have the Remote switch turned on for Yoke Port 1. I’m using 4 instances of BMT to handle routing.

MQ3.bmtp receives SysEx from my controller (Korg padKONTROL) and sends out to Yoke Port 2. This is, more or less, just a thru, but I’m also using it to turn my momentary pads into toggles and split my X/Y pad into 16 zones.

MQ2.bmtp receives from Yoke Port 2 (MIDI clock from Live and SysEx from my controller) and sends to Yoke Port 1. This sends the CCs to Live.

MQ1.bmtp receives from Yoke Port 2 (MIDI clock from Live and SysEx from my controller) and sends to the input on my controller. This is used for handling the lights and display on the controller.

I didn’t include the 4th instance as it’s identical to MQ2, it just sends a different CC. This is used because there aren’t enough global variables to do both in one instance.

Currently, the smoothing (in MQ2) is only set up for 1/16th notes. This could easily be set up for 1/32nds, but the current calculation definitely doesn’t work with 1/8ths or 1/4s.

Aside from looking at the smoothing, if you could suggest ways to limit the number of global variables I’m using, I’d really appreciate it.

Thanks for your time.

PS…before I forget to mention it, I was part of the team that developed the Total Kontrol Package, which is linked to on this page…http://www.bome.com/midi/translator/presets.html. Unfortunately, that package is no longer available and the site is down (partnership issues). I have several other setups I’ve developed using MT that you’re more than welcome to link to though. The site is:
http://www.nativekontrol.com/

metastatik

2008-05-31 22:43:37

I have a video of this up if anyone’s interested in seeing how it works. Didn’t end up adding the smoothing in between steps.

http://www.youtube.com/watch?v=ZiVguvjzEEQ