Issues sending Midi 0-64 as 0-127

dempsey1200

2009-08-30 17:09:05

Hoping someone here can help me. I'm using MT and Ableton. I'm trying to assign knobs on a Xone 1D so that 64-0 sends the same data for that knob as 0-127. Likewise, I"ll set 64-127 as 0-127 in order to have 2 effects on each knob.

I've captured the data in the translators for the knob. When I'm in Ableton, I map and assign the midi data as Relative - Signed Bit. When I move the knob (which is increasing the wet/dry of an effect), it over-accelerates the midi message. By this I mean, messages 0-20 (guessing on the 20) send the entire 0-127. This makes the knob/adjustments too sensitive.

Has anyone else experienced this? I have Ableton accepting signals from MT Virtual Out 1 as a MME port but also tried as a DirectMusic port but nothing changed.

joesapo

2009-08-31 07:05:08

dempsey1200 wrote:Hoping someone here can help me. I'm using MT and Ableton. I'm trying to assign knobs on a Xone 1D so that 64-0 sends the same data for that knob as 0-127. Likewise, I"ll set 64-127 as 0-127 in order to have 2 effects on each knob.

I've captured the data in the translators for the knob. When I'm in Ableton, I map and assign the midi data as Relative - Signed Bit. When I move the knob (which is increasing the wet/dry of an effect), it over-accelerates the midi message. By this I mean, messages 0-20 (guessing on the 20) send the entire 0-127. This makes the knob/adjustments too sensitive.

Has anyone else experienced this? I have Ableton accepting signals from MT Virtual Out 1 as a MME port but also tried as a DirectMusic port but nothing changed.
You are going to want to use an Absolute midi control assignment in Ableton, not a Relative one.

A normal relative hardware control only transmits velocities 63 or 65. With these endless controls, 63 usually means subtract one from the total and 65 means add one. Relative controls with *acceleration* however take each value they're given as a +x/-x from center. This means if you're setting up your Ableton control as a rel signed bit, you're looking at velocity values such as "50", for example, causing your control to think it wants -13 from start (middle value of 64 - sent value of 50 = a change of 13).

Unless you're using some sort of curve function in your translator rules, you should be getting a 1:2 ratio when moving your knobs.

A translator like this one, along with an Absolute midi mapping in Ableton should fix you right up;

Code: Select all

Translator 1: Knob Split
Options: stop=false
Incoming: MIDI B0 00 pp 
Rules: 
  if pp==64 then exit rules, skip Outgoing Action
  if pp<64 then Goto "Right"
  if pp>64 then Goto "Left"
  Label "Right"
  xx=pp-63
  xx=xx*2
  oo=1
  exit rules, execute Outgoing Action
  Label "Left"
  xx=pp-63
  xx=xx*-2
  oo=2
  exit rules, execute Outgoing Action
Outgoing: MIDI B0 oo xx 
Having a curve can be a good thing too, though...

For example, this translator I've pulled from one of my projects uses a simple y=x2 curve to smooth out a dual knob translator. I only use a single cc output on this translator, and instead use Ableton's rack chains to separate FX controls;

Code: Select all

Translator 1: DualFilter 1
Options: stop=true, thru
Incoming: MIDI BF 29 oo 
Rules: 
  if oo<=63 then Goto "Left"
  if oo>=64 then Goto "Right"
  Label "Left"
  xx=oo*2
  xx=xx-127
  xx=xx*-1
  xx=xx*xx
  xx=xx/127
  Goto "Exit"
  Label "Right"
  xx=oo-64
  xx=xx*2
  xx=xx*xx
  xx=xx/127
  Label "Exit"
Outgoing: MIDI BF 65 xx 
Hope this helps!

joe

dempsey1200

2009-09-01 00:29:25

Thanks a ton Joesapo. I got it to work but have some issues/questions. I'm brand new at this so forgive me for the basic questions. Can you explain to me what each of the code items is telling MT? I think this will help me become self-sufficient quicker. I read through the manual but it's all Greek to me.

Is there a way to know the "MIDI B0 00 pp" for each knob? To figure it out, I had to capture and then delete the captured codes to figure it out. This approach is time consuming so I'm hoping there's a better way.

joesapo

2009-09-01 01:05:39

No problem whatsoever... :D

dempsey1200 wrote:Translator 1: Knob Split (that's the name, right?)
Yep!
dempsey1200 wrote:Options: stop=false (where do I put this in? when I open up the options tab it has the name in the field)
When you open up the Translator Edit window, it's the checkbox in the Options [F5] tab. You should be able to just ignore this one, as every new translator is created with the stop=false already set. Also, the Translator name entry is here if you want to change it.
dempsey1200 wrote:Rules: I'm assuming I just cut & paste this in the rules text box. No other changes.
The rules I wrote in the example use variables PP,OO and XX. As long as these variable are used in your MIDI incoming and outgoing messages, then you should be able to use the rules as-is and just copy and paste them. Which brings us the your last question;
dempsey1200 wrote:If I type in the Incoming/Outgoing messages, how do I know which knobs it applies to?
Use the 'Capture MIDI' checkbox in the Incoming [F6] tab to find out what MIDI data the knob you want to use is transmitting. Enable the checkbox and twist your knob a few times (heheh) and see what you get. If MT detects that it's a variable control, such as a knob or a fader, it will automatically assign a variable to the end of the hex message.

So for summary;

Variable PP - The variable incoming value of the knob from your controller
Variable OO - The output control number that you want for each side of your knob. The original knob in the example was control #0. When we're in the LEFT side rules, we're going to output as knob #2, on the RIGHT side we're knob #1.
Variable XX - The outgoing altered value from the rules, scaled to your requirements.

Change your oo= settings in the rules to switch up which 'virtual knobs' you'd like to use, in case you're already using knobs #1 and #2 in other places in your midi mapping.

Hope this helps! We're still planning on doing a major manual overhaul so things like this are a little more clear to new users.

And as always I'm happy to help further in this matter if need be.

joe

joesapo

2009-09-01 01:26:15

Looks like you beat me to the submit button on that last one! ;)
dempsey1200 wrote:Thanks a ton Joesapo. I got it to work but have some issues/questions. I'm brand new at this so forgive me for the basic questions. Can you explain to me what each of the code items is telling MT? I think this will help me become self-sufficient quicker. I read through the manual but it's all Greek to me.
I will do my best;

Code: Select all

Translator 1: Knob Split     #Translator Name
Options: stop=false     #Don't stop any other translators that use this same incoming action
Incoming: MIDI B0 00 pp     #Fire off any time we hear channel #1, control #1, any value... AND pass on that value as the 'pp' variable
Rules:
  if pp==64 then exit rules, skip Outgoing Action     #do nothing in the middle, just exit
  if pp<64 then Goto "Right"     #if greater than the middle value, goto Right
  if pp>64 then Goto "Left"     #if less than middle value, goto Left
  Label "Right"
  xx=pp-63     #subtract your val by 63
  xx=xx*2     #then multiply by 2
  oo=1     #set our 'virtual' outgoing knob to send on #1 instead of the original #0
  exit rules, execute Outgoing Action     #step is done, skip all the rest.  exit and execute outgoing action
  Label "Left"
  xx=pp-63     #subtract the value by 63
  xx=xx*-2     #multiply by -2
  oo=2     #set the outgoing midi knob to #2 instead of #0, allowing you to map it in your program as it's own separate control
  exit rules, execute Outgoing Action     #all done - exit rules and execute
Outgoing: MIDI B0 oo xx 
#output on midi channel #1, either a value of 1 or 2, depending on what your oo variable is set as (indicating which side of the middle it is on, and with value xx.
dempsey1200 wrote:Is there a way to know the "MIDI B0 00 pp" for each knob? To figure it out, I had to capture and then delete the captured codes to figure it out. This approach is time consuming so I'm hoping there's a better way.


Not really, unfortunately. There are so many different midi controllers and so many different ways to program that that it would be virtually impossible to have them all set up beforehand. Your best bet is to get familiar with any sort of software editor that comes with your controller and see if you can start putting together the hex-to-decimal figures in your head.

I hear that an upcoming version of MT will be a little bit more friendly to the non-hex-speakers out there (myself included, most of the time)... :mrgreen:

EDIT: I think I had the +2 and -2 multiplication mixed up. Fixed it in both posts. :oops:

dempsey1200

2009-09-01 01:49:19

Thanks. I'm getting closer to what I need (and learning alot on the way). I've been on this program for an hour now... that makes 3 restarts. Going to have to buy the program soon if I can figure out that it can do what I need.

Can you split a knob into 2 virtual midi knobs? i.e. 63 - 0 = 0 - 127 that you can map to 1 wet/dry and then 64 - 127 = 0 - 127 on another wet/dry?

Basically, trying to get counter clockwise to be 1 effect and clockwise to be another. This would put 2 effects per knob on the 1D, which has a nice notch at 64 so it's easy to feel the split.

joesapo

2009-09-01 01:55:19

dempsey1200 wrote:Thanks. I'm getting closer to what I need (and learning alot on the way). I've been on this program for an hour now... that makes 3 restarts. Going to have to buy the program soon if I can figure out that it can do what I need.

Can you split a knob into 2 virtual midi knobs? i.e. 63 - 0 = 0 - 127 that you can map to 1 wet/dry and then 64 - 127 = 0 - 127 on another wet/dry?

Basically, trying to get counter clockwise to be 1 effect and clockwise to be another. This would put 2 effects per knob on the 1D, which has a nice notch at 64 so it's easy to feel the split.
That's exactly what the above example translator is doing...

Input: B0 00 [midi channel #1, controller #1]
+ rules mojo
Output: B0 01 [midi channel #1, controller #2 for the right side of the knob]
Output: B0 02 [midi channel #1, controller #3 for the left side of the knob]

I would recommend purchasing MT and then we can set up a Remote help session if you'd like. Sometimes this stuff is better to see that way.

Also, if you haven't already, try opening up the MT log window after you have your rules all set up. You can see in real time what the variables are doing in your rules.

:D

dempsey1200

2009-09-01 02:09:45

The remote help sounds pretty attractive. I'll have to check out the purchase plans. I'm going to reload my computer when Win7 comes on so want to make sure that doesn't cause an issue to reinstall and use up licenses.

I thought that the code should have it split in 2 virtual knobs but it doesn't seem to be the case. When I'm on Ableton, if I move the knob counter clockwise (from64) it has the same midi map as if I moved it clockwise (from 64). I thought the oo=1 and oo=2 should set it up as 2 but it isn't for some reason. Trying to figure that part out.

dempsey1200

2009-09-02 03:59:06

How can I get Ableton to recognize that oo=2 is a 2nd (virtual) midi knob? When I assign the knob counter-clockwise, it works perfect. When I assign the knob clock-wise, I have a problem. It wants to recognize the midi controller as a 'pitch bend' and as I continue to turn the knob in midi map mode it goes through 15 pitch bend selections.

I'm officially stuck. How can I set up a remote help?

dempsey1200

2009-09-04 15:58:58

After several hours and reading through a couple of manuals (and countless forums), I think I've found the 2 issues/questions.


1) How do I set up Ableton to only listen to specific "controllers"? It appears that when my output is set to Controller #2 or Controller #3 (per the right/left rules), Ableton is not separating which controller it reads. Maybe this is a MT setup issue?


2) When I'm setting up the assignment of "oo=1" or "oo=2" in the rules section to assign which controller gets the data, are these zero's or are they letters?

dempsey1200

2009-09-04 19:46:12

Well after logging in probably 10+ hours I finally figured it out. The problem all along was setting oo=1 and oo=2. These two channels were already being used (as joesapo warned earlier) and was causing some strange conflict. I reassigned to 112 & 113. Below is the code that worked for me. Very similar but a couple small modifications.


Incoming: BE 08 pp

Rules:
if pp==64 then exit rules, skip Outgoing Action
if pp<63 then Goto "Right"
if pp>65 then Goto "Left"
Label "Right"
xx=pp-64
xx=xx*-2
oo=112
exit rules, execute Outgoing Action
Label "Left"
xx=pp-64
xx=xx*2
oo=113
exit rules, execute Outgoing Action

Outgoing: BE oo xx

joesapo

2009-09-05 00:36:33

dempsey1200 wrote:Well after logging in probably 10+ hours I finally figured it out. The problem all along was setting oo=1 and oo=2. These two channels were already being used (as joesapo warned earlier) and was causing some strange conflict. I reassigned to 112 & 113. Below is the code that worked for me. Very similar but a couple small modifications.


Incoming: BE 08 pp

Rules:
if pp==64 then exit rules, skip Outgoing Action
if pp<63 then Goto "Right"
if pp>65 then Goto "Left"
Label "Right"
xx=pp-64
xx=xx*-2
oo=112
exit rules, execute Outgoing Action
Label "Left"
xx=pp-64
xx=xx*2
oo=113
exit rules, execute Outgoing Action

Outgoing: BE oo xx
*Great* to hear you got it worked out. Think of it as time invested. ;) The next time you go in to create a new translator it should be alot faster...

Please let us know if we can help you out!

joe