Talk to other MIDI Designer users about MIDI Designer, iOS MIDI and related topics. Or share layouts, pages, and ideas.

Check out our Facebook Group.

Of course, if you want to send us an email, feel free.

Open problem reports

Summary of user requests

MIDI Designer
Design your perfect MIDI controller for iPad, iPhone, and now on M-powered Macs
One knob to change the CC from 51 to two sequential CC values 61, and 29 at a certain threshold. - MIDI Designer Q&A

One knob to change the CC from 51 to two sequential CC values 61, and 29 at a certain threshold.

0 votes
asked Jan 19 in Advanced by flexoffset (530 points)
edited Apr 13 by flexoffset

3 Answers

+1 vote
 
Best answer

Reply #3 - building the named ticks for MSB and LSB control


re: That said, I still am unsure how to repeatedly increment CC #61 by 11 while CC #29 increments by 1 only when CC #61 reaches ~127 until they both reach 127.

Answer is a spreadsheet and named ticks.  Will need one control for MSB, one for LSB, and a super control.

You want to count to 127x127 (=16383) by increments of n x 11

16383/77 = 212.7, so we need 214 rows (213 + the row for zero)

First column just goes 0 to 213

Second column multiplies the first by n * 11, or 77 in this case

Row 214 exceeds 16383, (16401), so we paste in 16383.

Third column is our MSB, so we take the integer of second / 128

Fourth column is second MOD 128.

In MDP2, set up the MSB control, select named ticks, edit named ticks, delete all, then paste in the values from the MSB column

Repeat for the LSB control, pasting in the LSB column.

Create a new knob, select 14 bit Cc, select 214 ticks, Display Min/Max 1/214, and make it the supercontrol of the two controls above.  Ensure the MSB control is listed first in the subcontrols pane.  You can use named ticks to add appropriate labels to the supercontrol for the time or frequency.

Images
MSB LSB Table.png
MSB LSB Table.png
answered Jan 21 by jkhiser (18,490 points)
selected Jan 23 by flexoffset
Working on someting else, I realized this can be simplified.  Since the two Ccs are separated by 32, they are an automatic MSB/LSB pair.  So this only needs one control.  Build the knob for Cc 29, select 14 bit Cc, then paste the value column in for the named ticks.  MDP2 automatically handles the separation into MSB and LSB values, putting the LSB into Cc 61.
I've been wrestling with this for a couple months and it finally clicked and - holy cow it works!  I used the spreadsheet version. I am lost on how to do this with the one knob allowing MDP2 to handle the separation though. But the longer way with the supercontrol works. I can now move on with getting the PodXT layout finished.
+1 vote

Reply 1


Yes, using StreamByter.  And a couple of approaches possible there.

Brute force is just making three lookup tables for each of the output Cc values, in the sequence desired.  Build a synthetic SysEx command, with the appropriate number of ticks and labels, when SB sees the SysEx, it looks up and sends the appropriate values, blocking the synthetic SysEx command.  This would work for up to 256 ticks (size of SB arrays).

If the relationship of the messages can be defined logically, then instead of lookup tables they could be specified directly in the code.

If needed I can provide a template for the lookup approach that you could complete, or take a crack at a logic version.  

For the second, I would need a more complete definition of how the messages interact.   I am not seeing anything on Line 6 site that shows the interaction.  If there is, can you point me to it, or make a simple table.  Don't need every line, just the transitions.
Seq   CC51  CC61  CC29  Label
         01-12    na       na    4/4 - 1/32
          00        
et.
answered Jan 19 by jkhiser (18,490 points)
Thank you for your time and information.
I'll try to figure part one out. For part 2, the only indication is in Line 6 MIDI Continuous Controller Reference.pdf. It's not terribly obvious and I only discovered it snooping on the MIDI messages. Page 10 explains Paramater "Mod Param 1 LSB" simply as CC#61 with range 0-127. On page 8, it explains Parameter Modulation Param 1 as CC#29 with range 0-127.

I'll do my best to mimic what happens AFTER the transition from the tempo-sync'd note values to Hz:
I could have order backwards but the essence is this...
for the first frequency:
CC 61 sends 010
CC 29 sends 000

then after one detent on the knob
CC 61 sends 21
CC 29 sends 000

CC 61 sends 32
CC 29 sends 000

CC 61 continues along until it reaches 120 (that highest number it can get to 127 before rolling over since it's 11 digit increments.)
THEN CC29 will increment itself one digit.

CC 61 sends 003  (which is 127-120 +3  I think.)
CC 29 sends 001

CC 61 sends 014
CC 29 sends 001
then it continues on  with CC 29 incrementing one every time CC 61 approaches a value of 127.

Ultimately, the end of the road is when both CC 61 and CC 29 have sent 127.
+1 vote

Reply 2 (had to start new answer to include picture)


I got it now.  It is just counting up by 11 through the entire range, using an undefined MSB/LSB Cc pair.

This can be put on one control, but you will have a dynamic range problem.  The first 10 ticks control the notes, then the remaining 128x128 / 11 (~ 1490) ticks control the speed.  With these both on one control, it will be essentially impossible to accurately select one of the notes.  

Two thoughts.

Separate controls for notes and speed, with a show / hide control to select.  I use this often in my layouts (I built most of these before show / hide became avail, so I just have a switch - see picture).  Although, even if you do this, you have 1490 values on one MDP2 control, which can be unwieldy.  The advantage of this approach is SB is not needed - this can be done directly with MDP2 controls, including named ticks.

Or, downsample the time.  If you skip by 77 instead of 11, that is about 200 ish values, much more manageable than one with 1500 values.  With 200 values for time and 10 for notes, the control will be usable.

Since the control relationship is straight forward, we do not need the table lookup approach I first mentioned, which only works up to 256 values.  (It could work with downsampling.)
Images
note-rate.png
note-rate.png
answered Jan 20 by jkhiser (18,490 points)
I will give it a shot. That looks very promising. I will have a separate control for the note divisions.
That said, I still am unsure how to repeatedly increment CC #61 by 11 while CC #29 increments by 1 only when CC #61 reaches ~127 until they both reach 127.
Will get you something tonight.
...