How to access the power contained inside this highly versatile USB MIDI to CV converter

Modern MIDI controller keyboards come with a lot of input options: Keys with velocity and aftertouch; mod and pitch wheels; assignable sliders; even assignable trigger pads and switches. However, very few MIDI to control voltage + gate (CV/Gate) converters have enough outputs to take advantage of all these performance inputs. Many converters also assign what outputs they provide based on specific operating modes you have to choose between, such as duophonic with velocity, four voice polyphonic with no velocity, all sliders, etc.

That’s why I was attracted to the Expert Sleepers FH-1 ‘faderHost’. The base unit comes with eight outputs, which can be expanded in groups of 8 up to 64 outputs. More importantly, the FH-1 has all of its output modes available simultaneously without the need to change modes on the front panel. Instead, the FH-1 is programmed to look for MIDI messages on specific channels, and will seamlessly change between modes based on what it receives. For example, if a Note On comes in on MIDI Channel 1, it switches into a mode where it assigns the pitch CV to Output 1 and the gate to Output 2. If instead a pair of faders sends MIDI Continuous Controllers #00 & 01 to the FH-1 on MIDI Channel 1, the FH-1 will send their corresponding voltages to Outputs 1 & 2.

Since the FH-1 can do so many things at once depending on the MIDI message it receives, it can be initially daunting to figure out what input is going to produce what output. The secret is understanding the FH-1’s charts for how it decides to route a given MIDI message to one of its outputs. Then you can program your MIDI controller to send those messages on the required channels.

If your MIDI controller is not that flexible and won’t let you assign, say, the mod wheel to a different channel than the keyboard, then instead you need to “rewire” how the FH-1 responds to messages. Previously this required a bit of pseudo-coding as well going into a command line interface on your computer to generate the required hex file. Now, Expert Sleepers has created an online interface where you can set your desired mappings via a group of pop-up menus, and the web page in turn will generate the required hex file for you to install into the FH-1.

I’ll outline both approaches below, as well as touch on some of the additional power inside the FH-1 such as taking advantage of its software LFOs. This article will not be a comprehensive guide to accessing every possible option the FH-1 offers (it also has polyphonic and trigger-based key modes, as well as a sequencer, MIDI clocking, and more), but it will help you crack the code to make it do what you want.

Our Goal

To give the examples below some meaning, let’s sketch out a specific task. I have an Akai MAX25 that supports key velocity and aftertouch. It also has a mod wheel and four touch faders (as well as other controllers such as buttons and pads). I want to map these controllers to the following outputs on a single FH-1:

  • A monophonic keyboard with pitch control voltage, gate, key velocity, aftertouch, and mod wheel appearing on Outputs 1-5.
  • Two of the faders providing direct control voltage output as additional performance controls, appearing on Outputs 6 & 7.
  • Two of the faders controlling the speed and amplitude of an LFO generated by the FH-1, appearing on Output 8.

There is no one mode on the FH-1 – or any MIDI to CV/Gate converter, for that matter – which does all of these things. Therefore, we need to rewire either the MIDI controller or the FH-1 to cobble together a single, virtual, super-mode that does all that we want.

FH-1 and Voltage Ranges

The Expert Sleepers FH-1 allows you to set the voltage ranges on each output by changing jumpers on the back of the module. Each can be set to +/– 5 volts, 0-5 volts, and 0-10 volts. This required me to think ahead about what voltage range I wanted for each controller. I decided I wanted the pitch CV, key velocity, faders, and LFO (outputs 1, 3, 6, 7, and 8) to use biploar +/– 5v ranges, and the gate, aftertouch, and mod wheel (outputs 2, 4, and 5) to have 0-10v ranges. 0-5v probably would have sufficed – especially for the gate output – but some modules have extended voltage ranges, and I could always patch in an attenuator for inputs that had more limited ranges. A photo of the back of my FH-1 with its jumpers J1-J8 in these positions is shown here (you can click on it to make it larger): the lower jumper position is for +/– 5v; the upper position is for 0-10v.

Mapping Your Controller to the FH-1

If your controller allows you to assign the MIDI Channel and Continuous Controller (CC) number for each user interface element it provides, then it’s possible to customize the controller to match what the FH-1 needs. To accomplish this, you need to look through the Note On/Off and MIDI Continuous Controller Assignments charts on the Expert Sleepers web site and locate the routings you desire (velocity, mod wheel, an LFO, etc. to specific outputs on the FH-1), then use those tables to determine what inputs the FH-1 requires to produce them.

In my case, I want to output the pitch CV, gate, velocity, and aftertouch information from my keyboard. I looked at the FH-1 Note On/Off table, which has the FH-1 Outputs numbered along the top (1-8 is from the main unit; 9-12 are for an optional expander) and the required MIDI Channel along the left. I see two candidates: Note messages on MIDI channel 9 will provide the desired signals on outputs 1-4 (I’ve tinted those green below), and messages on channel 10 will provide them on outputs 5-8 (tinted yellow):

Let’s go with MIDI Channel 9 for the keyboard, using Outputs 1-4 on the FH-1. To keep related controls grouped together, it would make sense to route the mod wheel to the next available Output: #5. To figure out what the FH-1 needs to make that happen, we now need to turn our attention to the MIDI Continuous Controller Assignments table and see what controller number on what channel is routed to Output 5:

This table is read a little bit differently than the Note On/Off table: The MIDI channel is still down the left side, but the MIDI continuous controller numbers are read across the top. Inside the table, “faders 0” refers to outputting a set of 8 control voltages on the master FH-1 (known internally as unit #0 – that’s where the “0” came from in “faders 0”). Continuing with this scheme, “faders 1” refers to outputting a second bank of 8 voltages on the first slaved FHX-1 Output Expander (unit #1), and so forth. So to access the master unit’s 8 outputs, you would need to send the FH-1 MIDI CC messages 0 through 7 on MIDI Channel 1. This is tinted in red in the inset table below at right.

Normally the mod wheel is mapped to MIDI continuous controller #1. If you set your keyboard controller to MIDI Channel 1 and connected it to an FH-1, the mod wheel would appear on Output 2 (as controller #0 is mapped to output 1 and so forth, as indicated by the red area of the table here). Since the FH-1 has all modes “live” at the same time and switches from moment to moment based on what message it receives on a given channel, this clashes with the keyboard assignments we set earlier – we’re planning on using Output 2 for the note on/off gate.

To route the mod wheel to Output 5 instead, you would need to reprogram it to MIDI CC #4 (as controller 0 is routed to the first output) on MIDI Channel 1. Following the same logic, to program the first two sliders on our keyboard controller to the FH-1’s outputs 6 and 7, we need to assign them to MIDI CCs #5 and 6 on MIDI Channel 1.

Next we want to program an LFO to appear on the FH-1’s final output, #8. Let’s say we want to use the sine waveshape, and assign our remaining two slider controls to set its speed and amplitude. We look a bit further to the right and down the MIDI CC Assignments chart, and we see “sin 0” is at the intersection of MIDI Channel 5 down the left and controller numbers 64-71 across the top (highlighted in blue in the table below). Just as with the faders, “sin 0” refers to eight potential LFOs appearing on outputs 1-8 of our master FH-1. We only want one appearing on Output 8 (the last one), so that means we need to assign our desired amplitude slider to MIDI CC 71 on Channel 5. I did this to the fourth and final slider on my controller.

Looking to the left and a little higher in the chart, we see “lfo speed 0” at the intersection of MIDI Channel 3 and CC numbers 0-7 (highlighted in orange in the table to the right). Therefore, to control the speed of the LFO appearing on output #8 of our master FH-1, we need to assign the corresponding slider to CC 7 on MIDI Channel 3.

There’s one more little trick you’ll have to perform: Most of the values in the FH-1 default after power-up at the bottom of their voltage ranges, including the initial DC “fader” value for each output. An LFO’s value is added to that fader value in a bipolar, +/– fashion. In the case of the LFO we just created on Output 8, the lower excursions of the LFO would be clipped at its lowest output voltage. Therefore, you need to send an initial fader value to center this voltage range. Looking at our table again, this means sending MIDI CC 7 on Channel 1 with a halfway value of 40hex (64 decimal). You might need to program an extra UI element on your MIDI controller to send this, such as a pad or a button. The good news is, once you’ve initialized this value on the FH-1, you can save it as a preset and recall its state later. This is described in the online manual for the FH-1.

What if we couldn’t make up our mind what waveform to use? You could set up another bank of faders to control the contribution of sine, triangle, sawtooth, and random waveforms by assigning them to MIDI Continuous Controller 71 on MIDI channels 5, 7, 9, and 11 respectively. Then you could set up one master LFO level slider by using the “lfo multiplier 0” block in the chart, assigning it to CC 7 on MIDI channel 5. The “smoothing 0” parameter can also be assigned to control the amount of slew applied to the random waveshape.

You can see how easy it is to run wild with the FH-1 – but when you have controllers offering multiple banks of programmable sliders, as well as the ability to slave multiple FHX-1 Output Expanders to convert these gestures into voltages…well, you didn’t get into modular synthesis to have limits placed on you, did you?

Internally Rewiring the FH-1

The above instructions work great if you have a MIDI controller that allows you to set the MIDI channel for each section, as well as the continuous controller number for each slider as well as the mod wheel. But let’s say your controller is a bit more hardwired, insisting that every controller is transmitted on the same MIDI channel as the keyboard, and not allowing you to re-assign its sliders or wheel to new controller numbers. In this case, you need to move on to Plan B: virtually rewiring how the FH-1 responds to incoming messages.

As was noted up top, an advanced process that required learning scripting has been replaced by a web page with a graphical interface that lets you set the desired remapping between what your controller sends and what the FH-1 will output. This web page will then auto-generate the hex code file you need to load into the FH-1. Note that you must be using Google Chrome as your browser to generate these files; otherwise you may just get a new web page with the resulting text and nothing saved to disk. The programmable part of the page looks like this:

At first glance this might look even more intimidating than the mode charts shown above, but again you just need to search for the specific function you wish to edit, and focus on that. Let’s recreate our configuration from above, but this time assuming our MIDI controller sends everything out using default controller numbers on MIDI Channel 1.

To get our note controller to send pitch CV, gate, velocity, and aftertouch on the FH-1’s Outputs 1-4 respectively, look at the first line in the MIDI/CV Converters section near the top of the web page. It’s already assigned a keyboard to MIDI Channel 1, with CV routed to Output 1 and Gate to Output 2. For the additional parameters, set the popup for Velocity to Output 3, and for Aftertouch to Output 4. This is colored green in the table below:

Just for clarity and to be safe (okay, paranoid), I unchecked the Enable options for all of the other note input assignments, so stray voltages wouldn’t start appearing on the outputs should another MIDI channel’s information get merged into the incoming stream; that’s tinted yellow in the table above.

Now comes setting up the direct outputs. The mod wheel defaults to being MIDI Continuous Controller (CC) 1, and again we’re assuming MIDI Channel 1; we want it to appear on the FH-1’s Output 5. This just requires setting a pair of popups under the Direct Control column (the left-most one) on the row for Output 5.

Next, the Akai MAX defaults its first four sliders to MIDI CC 12, 13, 14, and 15. To map the first two sliders to the FH-1’s Outputs 6 and 7, set the popups for the next two Output rows underneath the mod wheel to 12 and 13. These three assignments are tinted red in the image below:

Now let’s configure control of that LFO. We want it to appear on FH-1 Output 8; that means setting popups for the bottom row in the table. We want the third slider on the MAX – MIDI CC 14, on MIDI Channel 1 – to control the speed; that’s under the second column (tinted orange in the image above). We decided to use a Sine wave for this; its amplitude is set under the fourth column – so we set Channel 1 and CC 15 for that (tinted blue).

Finally, we need to set an initial offset for that output to be the middle of its voltage range, with the LFO moving above and below that; that’s set with a checkbox in the far right column for row 8, tinted pink. (You might also noticed I set the other outputs we’re using for the keyboard to channel 16, just to make sure a controller on Channel 1 doesn’t accidentally set a rogue value – for example, the mod wheel’s controller #1 is assigned by default to Output 2, and we don’t want that.)

When you have entered your desired mappings in Chrome, scroll back to the top of the Script Generator page and look for “Download script to disk” and “Download Hex to disk” underneath the “Generated Script” box. Use the Download Script button to save yourself a copy of your script that you can re-load later; give the file a name you’ll remember. If you’re curious, the resulting script is shown below; I removed my “defensive programming” of disabling the unused keyboard modes and setting unused controllers to Channel 16 to make it easier to read:

Now let’s get this script into the FH-1. Again you must be using the Google Chrome browser for this to work. Click Download Hex, but do not change the filename: it must be “image.hex”. After downloading, locate the file in your Downloads folder, and copy it to the “root level” of a USB thumb drive (in other words, do not place it in a folder on that drive).

Turn off the FH-1, plug the USB drive into its front panel, and turn the FH-1 back on again. It will start to go through its normal boot-up procedure. If it finds the “image.hex” file on the USB drive, the red and blue columns of LEDs will alternately blink. Press and hold the encoder for over 1 second, and the FH-1 will load the script and remember it across future power on/offs. When the FH-1 is done booting, remove the USB drive and connect your MIDI controller back to the FH-1. (If your LFO does not seem to be working initially, that’s because it defaults to essentially zero speed; move the slider on your controller that you assigned to speed and it will come to life.) You can replace your custom programming by loading a new script following the procedure above.

It’s Not as Hard As it Sounds – Really!

That may seem like a lot of words and instructions, but in reality the procedure isn’t hard at all – it’s just a matter of not getting overwhelmed by all the choices, and instead learning to read the Expert Sleepers charts to find the options you want. Personally, I build up to my goal one controller at a time, checking to make sure each addition works before moving on – that makes it easier to troubleshoot when something doesn’t work as expected. After just a little practice, I quickly went from “what am I going to do with all those slider banks on my controller and all those outputs on the FH-1?” to the desire to get a couple of FHX-1 Expanders and program even more sliders, pads, and buttons so I can get an even better grip on performing my modular synth.