nonsequitarian Author Image

Katana MIDI Proxy

Using a MIDI proxy script to control a Boss Katana MkII with a generic MIDI Controller


My main guitar amp is a Boss Katana MkII Head. I like it, but it doesn’t come with any way to control the settings while playing. Boss sells foot pedals, and there is an aftermarket option available, but I had a nice ActitioN foot controller I’d already been using with the virtual amp and effects software on my computer, and I enjoy a geeky challenge from time to time, so I thought I’d take a stab at getting it to work with the Katana.

Connecting the controller directly to the amp, I could select from the available presets by sending Program Change (PC) MIDI values 1-8. That was it, though. There was no way to turn individual pedals on and off, nor to swap through the different pedal combinations available inside a preset. I’d been using FxFloorBoard and Katana Librarian to control all of the settings instead of Boss’s Tone Studio, which meant it was possible to talk to the amp with custom software. Searching the VGuitar Forums archives I learned that the Katana is controlled by MIDI, but with complex System Exclusive (SysEx) messages instead of the simpler PC or Control Change (CC) commands I was familiar with. I knew mididings, a MIDI processing tool for Linux using Python as its interface, could handle the details of listening for, routing, and generating MIDI messages, I just had to figure out what commands I should be sending.

At first I didn’t even have to understand the SysEx command format very deeply, I just sniffed what FxFloorBoard sent out and had my script send the exact same bytes. This got me surprisingly far. I was able to cargo-cult my way into doing everything I wanted to: I could select any of the 8 presets (using 4 buttons to select and a 5th to toggle between two banks, matching the amp’s controls), turn all the pedals on and off, turn solo boost on and off, toggle the expression pedal between volume and wah, cycle through the each preset’s available pedal choices, and even tap the timing for each of the two delay pedals!

It wasn’t perfect, though. To work correctly the script needed to track the state of the amp settings: which pedals are selected, what preset is in use, etc. Unfortunately, it wouldn’t know when settings changed unless it sent the command to do so. Changing a preset, power cycling the amp, turning knobs on the panel, or restarting the script would all make the cache get out of sync. It was usable, but buttons often needed to be pressed twice before they’d do the right thing, which was awkward and annoying.

I knew FxFloorBoard stayed in sync with the amp settings, and I could see the messages that the Katana was sending that had the information, but these were far longer than the outgoing messages I’d been dealing with and I didn’t know how to make sense of them. Luckily some helpful folks (including, “gumtown”, who wrote FxFloorBoard) replied to my forum post, answering my noob questions and pointing me to an article that helped me actually understand the details of the SysEx message format. With their support I was able to get the amp to send its state data when needed, and to make sense of that data once I got it.

Now my script’s cache stayed in sync, but there was still one rough edge: the pedal controller lights did not. The foot controller LEDs would turn on and off correctly when I stepped on an individual setting’s button, but they wouldn’t reflect setting changes made any other way. This was especially annoying when changing patches, because the lights on the pedalboard would no longer correspond to which pedals were and weren’t active.

I emailed the manufacturer asking if it was possible to control the LEDs from outside the controller. Thomas Kis (the man behind AcitioN) said not yet, but that he had firmware update plans in the works and would consider adding that as a feature. Needless to say I was delighted when he followed through, sending me a firmware update that allowed the lights to be turned on and off via MIDI (along with some other nice features, check them out if you’re looking for foot pedal MIDI controllers). I’d been using it without that nicety for a while by this point, so it was truly a thrill to finally see the lights on my pedalboard turn on and off in sync with the amp’s panel when I changed presets.

The script needs a computer to run on, and I don’t want to bring a laptop with me whenever I play out, so the final touch was setting up a Le Potato single board computer to work headlessly. The foot controllers and the Katana connect to a small USB hub, and the Le Potato runs a utility called amidiminder that automatically sets up the MIDI routing connections when it detects the devices. I also changed the filesystem to boot in read-only mode so it’s safe to cut the power without doing a clean shutdown.

I’m sure most folks would rather just get an Airstep Kat and be done with it, but I’ve put the script and all the system config files up on github just in case anyone else is weird like me and/or happens to already have a midi foot controller, USB hub, and Raspberry Pi type thing lying around with which they want to control a Katana amp. Or it could be used as a starting point for a different middleware type project. The mididings library only runs on Linux, but similar things could be done on MacOS or Windows using Max/MSP or PureData to handle the routing. Feel free to reach out if you want to do something like this and have any questions.