View Full Version : MIDI Controller for DMC GCX Audio Switcher
Here's a configuration for a basic footswitch MIDI controller. Each MIDI CPU input is configured as a basic switch input.
The wiring diagram:
http://highlyliquid.com/support/img/midi-cpu/midi-cpu-switch-input-90.jpg
Unneeded switches can be replaced with an open circuit. Let's assume that each foot switch is momentary.
Here's a basic SysEx configuration that assigns each switch to a different program change command. (also sometimes called patch select, etc.)
This is very basic--we can also do things like generate multiple messages from each input, different types of messages, etc.
What would everyone like to see?
// MIDI CPU Control Terminal Configuration
// 24 momentary switch inputs
// Fixed Header Identifies the Control Terminal Configuration Message
F0 00 01 5D 04 01
// This byte identifies the configuration "layer". Layer 0 is the "primary" layer.
00
// Control Terminal Configuration Chunks
// Each chunk is 6 bytes: nn tt mm ch d0 d1
// nn = terminal number
// tt = transition
// mm = mode
// ch = channel
// d0 and d1 are mode-specific parameters
// Control Terminal 0: Logic Input, Program Change (Mode 50)
// nn = 0
// tt = 0 (midi command is generated when the switch changes from open-to-closed
// mm = 50 (program change, fixed program #)
// ch = 00 (channel determined by channel jumper)
// d0 = 00 (Program 0)
// d1 = 00 (this mode ignores d1)
00 00 50 00 00 00
// this line is for switch transition from closed-to-open
// mode 7F: do nothing
00 01 7F 00 00 00
// next 23 inputs: same thing, but for program #s 2-23
// Control Terminal 1: Program #1
01 00 50 00 01 00
01 01 7F 00 00 00
// Control Terminal 2: Program #2
02 00 50 00 02 00
02 01 7F 00 00 00
// Control Terminal 3: Program #3
03 00 50 00 03 00
03 01 7F 00 00 00
// Control Terminal 4: Program #4
04 00 50 00 04 00
04 01 7F 00 00 00
// Control Terminal 5: Program #5
05 00 50 00 05 00
05 01 7F 00 00 00
// Control Terminal 6: Program #6
06 00 50 00 06 00
06 01 7F 00 00 00
// Control Terminal 7: Program #7
07 00 50 00 07 00
07 01 7F 00 00 00
// Control Terminal 8: Program #8
08 00 50 00 08 00
08 01 7F 00 00 00
// Control Terminal 9: Program #9
09 00 50 00 09 00
09 01 7F 00 00 00
// Control Terminal 10: Program #10
0A 00 50 00 0A 00
0A 01 7F 00 00 00
// Control Terminal 11: Program #11
0B 00 50 00 0B 00
0B 01 7F 00 00 00
// Control Terminal 12: Program #12
0C 00 50 00 0C 00
0C 01 7F 00 00 00
// Control Terminal 13: Program #13
0D 00 50 00 0D 00
0D 01 7F 00 00 00
// Control Terminal 14: Program #14
0E 00 50 00 0E 00
0E 01 7F 00 00 00
// Control Terminal 15: Program #15
0F 00 50 00 0F 00
0F 01 7F 00 00 00
// Control Terminal 16: Program #16
10 00 50 00 10 00
10 01 7F 00 00 00
// Control Terminal 17: Program #17
11 00 50 00 11 00
11 01 7F 00 00 00
// Control Terminal 18: Program #18
12 00 50 00 12 00
12 01 7F 00 00 00
// Control Terminal 19: Program #19
13 00 50 00 13 00
13 01 7F 00 00 00
// Control Terminal 20: Program #20
14 00 50 00 14 00
14 01 7F 00 00 00
// Control Terminal 21: Program #21
15 00 50 00 15 00
15 01 7F 00 00 00
// Control Terminal 22: Program #22
16 00 50 00 16 00
16 01 7F 00 00 00
// Control Terminal 23: Program #23
17 00 50 00 17 00
17 01 7F 00 00 00
// Fixed Footer
F7
DougA
05-19-2010, 12:44 AM
If I'm understanding this, the hex for doing a cc "push on push off" switching set up would look like this, given eight consecutive cc's starting @ 80 thru 87
with 0 being "open" and 127 being "closed".
F0 00 01 5D 04 01 00 00 00 4C 00 80 7F F7
F0 00 01 5D 04 01 00 00 01 4C 00 80 00 F7
F0 00 01 5D 04 01 00 01 00 4C 00 81 7F F7
F0 00 01 5D 04 01 00 01 01 4C 00 81 00 F7
F0 00 01 5D 04 01 00 02 00 4C 00 82 7F F7
F0 00 01 5D 04 01 00 02 01 4C 00 82 00 F7
F0 00 01 5D 04 01 00 03 00 4C 00 83 7F F7
F0 00 01 5D 04 01 00 03 01 4C 00 83 00 F7
F0 00 01 5D 04 01 00 04 00 4C 00 84 7F F7
F0 00 01 5D 04 01 00 04 01 4C 00 84 00 F7
F0 00 01 5D 04 01 00 05 00 4C 00 85 7F F7
F0 00 01 5D 04 01 00 05 01 4C 00 85 00 F7
F0 00 01 5D 04 01 00 06 00 4C 00 86 7F F7
F0 00 01 5D 04 01 00 06 01 4C 00 86 00 F7
F0 00 01 5D 04 01 00 07 00 4C 00 87 7F F7
F0 00 01 5D 04 01 00 07 01 4C 00 87 00 F7
Am I going the right direction? Is this what I would send to the MIDI CPU to do this?
Thanks,
DougA
If I'm understanding this, the hex for doing a cc "push on push off" switching set up would look like this, given eight consecutive cc's starting @ 80 thru 87
with 0 being "open" and 127 being "closed".
F0 00 01 5D 04 01 00 00 00 4C 00 80 7F F7
F0 00 01 5D 04 01 00 00 01 4C 00 80 00 F7
F0 00 01 5D 04 01 00 01 00 4C 00 81 7F F7
F0 00 01 5D 04 01 00 01 01 4C 00 81 00 F7
F0 00 01 5D 04 01 00 02 00 4C 00 82 7F F7
F0 00 01 5D 04 01 00 02 01 4C 00 82 00 F7
F0 00 01 5D 04 01 00 03 00 4C 00 83 7F F7
F0 00 01 5D 04 01 00 03 01 4C 00 83 00 F7
F0 00 01 5D 04 01 00 04 00 4C 00 84 7F F7
F0 00 01 5D 04 01 00 04 01 4C 00 84 00 F7
F0 00 01 5D 04 01 00 05 00 4C 00 85 7F F7
F0 00 01 5D 04 01 00 05 01 4C 00 85 00 F7
F0 00 01 5D 04 01 00 06 00 4C 00 86 7F F7
F0 00 01 5D 04 01 00 06 01 4C 00 86 00 F7
F0 00 01 5D 04 01 00 07 00 4C 00 87 7F F7
F0 00 01 5D 04 01 00 07 01 4C 00 87 00 F7
Am I going the right direction? Is this what I would send to the MIDI CPU to do this?
Thanks,
DougA
Hi Doug, you're on the right track, but you'll need to make some changes:
First, you can configure all the terminals with a single message. What you have could work, but you'd need to send each line separately. Instead, you can have a single header & layer number, then list all the 6-byte chunks together.
Second, all of the bytes in the message (two digits together) are in hexadecimal (ie, machine-speak). So if you have a decimal (ie, human-speak) number in mind, you have to convert it to hexadecimal before putting it into the message.
CC #s 80-87 are 50-57 in hex. You can see a table of decimal and hexadecimal values here (http://highlyliquid.com/support/library/midi-note-numbers/). The table is for note numbers, but CC numbers, program numbers, etc. are the exact same. You can also type "87 in hex" into Google, and it will tell you, "87 = 0x57".
So, your configuration whould look like this:
// header
F0 00 01 5D 04 01
// layer number
00
// control terminals 0-7 send CC 80-87
00 00 4C 00 50 7F
00 01 4C 00 50 00
01 00 4C 00 51 7F
01 01 4C 00 51 00
02 00 4C 00 52 7F
02 01 4C 00 52 00
03 00 4C 00 53 7F
03 01 4C 00 53 00
04 00 4C 00 54 7F
04 01 4C 00 54 00
05 00 4C 00 55 7F
05 01 4C 00 55 00
06 00 4C 00 56 7F
06 01 4C 00 56 00
07 00 4C 00 57 7F
07 01 4C 00 57 00
//Footer
F7
However...that would work best with latching switches.
With momentary switches, you'd have a "push-on, release-off" setup. In other words, the MIDI CPU would send the CC "on" value of 127 when the button is pushed, and then send the "off" value of 0 when the button is released.
"Push-on, push-off" is also possible, but with a different configuration. Let me know if you'd like to see it. ;)
DougA
05-20-2010, 01:19 AM
John,
I see where this is going. I do plan on using "latching" switches, so this configuration is what I need.
If I were to enter the hex message just as you have it, would that do the trick? Or would it look like below?
F0 00 01 5D 04 01
00
00 00 4C 00 50 7F
00 01 4C 00 50 00
01 00 4C 00 51 7F
01 01 4C 00 51 00
02 00 4C 00 52 7F
02 01 4C 00 52 00
03 00 4C 00 53 7F
03 01 4C 00 53 00
04 00 4C 00 54 7F
04 01 4C 00 54 00
05 00 4C 00 55 7F
05 01 4C 00 55 00
06 00 4C 00 56 7F
06 01 4C 00 56 00
07 00 4C 00 57 7F
07 01 4C 00 57 00
F7
Thanks,
DougA
John,
I see where this is going. I do plan on using "latching" switches, so this configuration is what I need.
If I were to enter the hex message just as you have it, would that do the trick? Or would it look like below?
F0 00 01 5D 04 01
00
00 00 4C 00 50 7F
00 01 4C 00 50 00
01 00 4C 00 51 7F
01 01 4C 00 51 00
02 00 4C 00 52 7F
02 01 4C 00 52 00
03 00 4C 00 53 7F
03 01 4C 00 53 00
04 00 4C 00 54 7F
04 01 4C 00 54 00
05 00 4C 00 55 7F
05 01 4C 00 55 00
06 00 4C 00 56 7F
06 01 4C 00 56 00
07 00 4C 00 57 7F
07 01 4C 00 57 00
F7
Thanks,
DougA
Yes, that's correct. The comments "//..." are only for documentation. Of course, if something doesn't work the way you want, you can re-configure the MIDI CPU as many times as needed.
DougA
05-20-2010, 08:01 PM
John,
Thanks! This should get me going.
DougA
DougA
06-02-2010, 01:15 AM
John,
There is something I'm missing in the program. What I'm trying to accomplish, is to switch the loops on and off on a DMC GCX which responds to cc 80 thru 87. Loops are active with 127 and inactive with 0. All on MIDI ch 16.
This is what I've used as the program. Can you look it over and see what I've missed?
F0 00 01 5D 04 01
00
00 00 4C 10 50 7F
00 01 4C 10 50 00
01 00 4C 10 51 7F
01 01 4C 10 51 00
02 00 4C 10 52 7F
02 01 4C 10 52 00
03 00 4C 10 53 7F
03 01 4C 10 53 00
04 00 4C 10 54 7F
04 01 4C 10 54 00
05 00 4C 10 55 7F
05 01 4C 10 55 00
06 00 4C 10 56 7F
06 01 4C 10 56 00
07 00 4C 10 57 7F
07 01 4C 10 57 00
F7
Also have the following Jumpers in place. Are these correct for Ch 16?
+1
+4
+8
Thanks,
DougA
DougA
06-07-2010, 12:45 AM
John,
Any response? I really would like to find out whats going on. I get midi activity but nothing else. :confused:
Thanks,
DougA
Hi Doug,
F0 00 01 5D 04 01
00
00 00 4C 10 50 7F
00 01 4C 10 50 00
01 00 4C 10 51 7F
01 01 4C 10 51 00
02 00 4C 10 52 7F
02 01 4C 10 52 00
03 00 4C 10 53 7F
03 01 4C 10 53 00
04 00 4C 10 54 7F
04 01 4C 10 54 00
05 00 4C 10 55 7F
05 01 4C 10 55 00
06 00 4C 10 56 7F
06 01 4C 10 56 00
07 00 4C 10 57 7F
07 01 4C 10 57 00
F7
This looks ok to me. The MIDI CPU resets when you send the configuration, correct?
A couple of notes:
Since ch=10h, or channel 16, for each control terminal, the channel jumpers will be ignored.
The channel jumpers are used by the control terminal only if the ch value is 00h. In that case, for channel 16, you'd want to connect all 4 channel jumpers. (1 + 1 + 2 + 4 + 8 = 16)
Are you using SendSX? If so, you can take the MIDI output from the MIDI CPU and view it in the "Midi In" pane. If we can see the hex output from the MIDI CPU, it will help to diagnose the problem.
Your SysEx looks good, so I'm guessing that the problem is something simple like a channel mismatch, etc.
DougA
06-08-2010, 11:47 AM
John,
Thanks for the response. I am using SendSX, so I'll give it a view later in the day and report.
Thanks, again,
DougA
DougA
06-09-2010, 02:26 PM
John,
This is what MIDI ox tells me. ( midi out of GCX ) This setup still does not work. This is what comes up when I punch on and off the switches. It seems that there is no midi ch info being transmitted. I see activity thru the chain. MIDI Ox registers no ch data indicators.
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT
00000000 3 -- 50 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 50 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 51 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 51 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 52 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 52 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 53 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 53 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 54 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 54 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 55 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 55 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 56 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 56 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
00000000 3 -- 57 00 00 -- --- Unknown Event
00000000 3 -- 7F 00 00 -- --- Unknown Event
00000000 3 -- 57 00 00 -- --- Unknown Event
00000000 3 -- 00 00 00 -- --- Unknown Event
This is what comes up in SendSX.
BF 51 7F
BF 51 00
BF 52 7F
BF 52 00
BF 53 7F
BF 53 00
BF 54 7F
BF 54 00
BF 55 7F
BF 55 00
BF 56 7F
BF 56 00
BF 57 7F
BF 57 00
Any ideas what is going on?
Thanks,
DougA
This is what comes up in SendSX.
BF 51 7F
BF 51 00
BF 52 7F
BF 52 00
BF 53 7F
BF 53 00
BF 54 7F
BF 54 00
BF 55 7F
BF 55 00
BF 56 7F
BF 56 00
BF 57 7F
BF 57 00
Is this the output from the MIDI CPU? If so, it is what is expected.
A CC command has the format [Bx d0 d1] where the x is the channel number. BF is a CC command on channel 16. The second byte is the CC#, and the third is the CC value. More here:
http://home.roadrunner.com/~jgglatt/tech/midispec/ctl.htm
(other messages here: http://home.roadrunner.com/~jgglatt/tech/midispec.htm )
MIDI ox seems to have missed the initial "status" byte BF, and therefore doesn't know how to interpret the data. (You can see all of the data bytes listed.)
The MIDI CPU uses "running status":
http://home.roadrunner.com/~jgglatt/tech/midispec/run.htm
Meaning that the status byte is sent once at the beginning of a block of messages sharing the same status.
I think MIDI ox will give the appropriate result if you power cycle the MIDI CPU before recording the data stream.
...and come to think of it, I should modify the firmware so that the status byte is always re-sent after a short period of inactivity. I'll put this in version 1.1.
In the meantime, you should get results by always resetting the MIDI CPU after connecting it to a new receiving device or application.
DougA
06-09-2010, 04:52 PM
John,
Power recycling is the ticket. All works as it should. I couldn't have done it without you (and the MIDI CPU):D
As I get more into the capabilities of the MIDI CPU, my projects will grow in scope. Looking forward to experimenting with controllers for my audio workstation and beyond.
Thanks for all the help and patience,
DougA
John,
Power recycling is the ticket. All works as it should. I couldn't have done it without you (and the MIDI CPU):D
As I get more into the capabilities of the MIDI CPU, my projects will grow in scope. Looking forward to experimenting with controllers for my audio workstation and beyond.
Thanks for all the help and patience,
DougA
Great! And thank you for the feedback and patience...I'm sure other users could have the same issue, so I'm very glad that you brought this to my attention.
I hope you'll post some project photos or video. :)
John,
Power recycling is the ticket. All works as it should. I couldn't have done it without you (and the MIDI CPU):D
Hi Doug, your issue has been addressed in the version 1.1 firmware. Power-cycling the MIDI CPU should no longer be necessary after connecting a new receiving device.
vBulletin® v3.8.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.