Some time ago, I wrote this post about enhancing the built-in sounds of a Casio keyboard, and possibly most other keyboards as well, but I was still unsatisfied because of having to mess with virtual buttons and sliders, which feel unnatural when you are in the thrall of music making. But then, Santa Claus dropped a Korg Nanokontrol2 down my chimney. Now I’ve got all of that intuitive nuance I was missing, plus some, courtesy of the Casio MIDI implementation. This article is essentially the same I posted at the Casio Music Forum a few weeks back, so I’m forgiving my self-plagiarism and reposting it here.
In essence, the keyboard will not only send out notes through a cable connected to its USB-B port, but also will play when MIDI messages come in through that port. And not only notes, but also all kinds of codes that tweak the way the sound is produced. I can use the knobs and sliders of my Nanokontrol2, which is narrow enough to sit on top of the keyboard without impeding performance, to tweak reverb, attack time, chorus, everything, in real time.
Here’s what you need:
- USB-B to USB-A cable, as for a printer (likely you have that already).
USB hub (USB2 is enough because of the low bandwidth) with two or more ports.
iPad or iPhone. It can be very old because of the low bandwidth required. I think an Android device might work too, but I have not bothered to find the software that will do the magic.
“camera connection kit” to convert USB to the Lightning port of the iPad (Android will need a different adaptor).
App that will echo MIDI back to the input. I use MIDIflow, which costs a few bucks, but the free MIDI Wrench works too. No idea what the app would be on Android.
MIDI control surface full of knobs and sliders, plus a few buttons. I got a Korg Nanokontrol2, but there’s also a cheap Chinese one (even cheaper at AliExpress) that might work just as well.
Obviously, a keyboard with MIDI capability. Mine is a Casio CDP-S350.
And here’s what you do:
- Program into the control surface the CC numbers for the features you want to control on your keyboard, on channel 1 for the Casio, associating hardware components (knobs, sliders, and buttons) to CC numbers. I am attaching the list, taken from my Casio CDP-S350 MIDI implementation chart, at the end of this post. The Nanokontrol2 has a software that allows you to make any of its knobs etc. send CC messages for any number and any MIDI channel. Channel 1 is the main keyboard patch, without layering or split. You may want to put stickers next to each control, to remind yourself of what it does. A list is at the end of this post.
2. Mount it on your keyboard (I found the area left of the power button to work best for me, with some adhesive velcro, as seen in the top picture), and attach a USB cable to it. Also attach a USB cable to the keyboard.
- Connect both USB cables to the USB hub, and that to the iPad with the camera connection kit in-between.
4. Turn on the iPad and open the app. MIDIflow works by mapping an input to an output, so I run two paths, both on channel 1: one feeding the MIDI IN from the Casio keyboard to out to the same keyboard, the other feeding the MIDI from the Nanokontrol2 out to the Casio keyboard.
- Go to the menu on the keyboard, MIDI section, and turn Local OFF. This will cause the sound to be produced only as a result of the MIDI messages coming in through the cable, and not directly from the keys. I found the delay caused by this process to be unnoticeable.

And that’s it! Now your keyboard should be responsive to the knobs and sliders on the control surface. Your reverb can get much greater, as well as your chorus, and everything. You can make the attack so slow that a piano will sound like a violin. A lot of release time will cause notes to blend, pretty much like having a lot of internal resonance. Below is a table with the CC numbers that work on the Casio CDP-S350, from their published MIDI implementation document.
And here are the CC numbers:
CC number Action range
1 modulation 0-127
5 portamento time 0-127
7 volume 0-127
10 pan 0-127
11 expression 0-127
64 hold off/on 0,127 for a button
65 portamento off/on 0,127 for a button
66 sostenuto off/on 0,127 for a button
67 soft pedal off/on 0,127 for a button
68 legato off/on 0,127 for a button
71 filter resonance 0-127
72 release time 0-127
73 attack time 0-127
74 filtr cutoff 0-127
76 vibrato rate 0-127
77 vibrato depth 0-127
78 vibrato delay 0-127
84 portamento control 0-127
91 reverb send 0-127
93 chorus send 0-127
94 delay send 0-127
120 all sound off 0 for a button
123 all notes off 0 for a button
126 mono mode 0 for a button
127 poly mode 1-127 for a button