MIDI implementation protocol for Houston

Since Houston is now unsupported for a while, it would make sense for Steinberg to release the official MIDI implementation for it. This will give the Houston users the ability to use it as a “generic” surface in the future (for example with the upcoming Wavelab 7.2). Alternative, maybe the Houston Cubase/Nuendo driver source can be made open source, to allow maintenance from the development community.

Thank you for your consideration,


Stefanos, I have a document that should help you. PM me with your email and I will send you a copy. This is all the info from the section on MIDI.


  1. MIDI & USB implementation.
    When Houston USB is connected to a powered ‘Host’ (PC/MAC computer) then the MIDI In/Out sockets are inactive.
    USB MIDI data will not be sent to the Host until some MIDI USB input data is received.
    USB uses Interrupt Transactions with ‘ACK/NACK’ handshake (not STALL) see: “USB Spec 1v1.pdf” page 167.
    Note: Using Steinberg ‘v4’ USB driver on a PC, if the USB lead is unplugged or the Houston power switched off while a programme is using USB MIDI the the PC will lock up (usually Blue screen of death). If USB mysteriously stops working after Opening/Closing PC programes, Restart the PC then everything should be Ok.
    There is no such problem when using ‘5 pin DIN’ MIDI connections.
    In the explanation below ‘MIDI’ referes to: USB socket MIDI or 5 pin DIN MIDI Input/Output.
    MIDI is inactive while Fader & Touch calibrate in progress.
    Houston only accepts Fader and Rotart information (MIDI Controller) on Input Ch 1/Output Ch 1, Sys-Ex data must have ‘H’ouston header and appropriate format with checksum (Sys-Ex does not have MIDI channel).
    If MIDI ‘Active sensing’ is received then MIDI ‘Active sensing’ is sent out every 0.5 seconds.
    The internal Green MIDI Rx LED to flash when any MIDI data is received (‘LED87’ on the ‘Fader’ PCB near ‘IC27’)
    Houston Buttons send MIDI ‘Controller’ ‘0xB0’, Group # 20 to 23, Even button # +1 when depressed (Bit 0 = set = depressed), LEDs under the buttons light when MIDI ‘Controller’ ‘B0 hex’, Group # dec, Button # 0.50 dec + bit0 = Set = LED = Lit.
    Group # 20 = ‘Global Master’ = 0 ‘Fader set EQ1’ = 8, ‘Fader set Aux1’ = 24, ‘Selected EQ+’ = 40, ‘Selected Routing’ = 54
    Group # 21 = ‘Selected Ch1’= 0 ‘Defeat Mute’ = 16, ‘Mute Ch1’ = 18,‘Defeat Solo’ = 34, ‘Solo Ch1’ = 36 ‘Solo Ch8’ = 50
    Group # 22 = ‘Motors’ = 0 ‘Shift’ = 8, ‘Sets’ = 10, ‘<8’ = 20, ‘8>’ = 22, ‘Stop’ = 24, ‘<<’ = 26, ‘>>’= 28, ‘Rec’ = 30, ‘Arm’ = 32, ‘Play’ = 34
    Group # 23 = ‘Num 0’ = 0 '‘10’ = 20, ‘Enter’ = 22, ‘Zap’ = 24, ‘Funct’ = 26 ‘Sets’ = 32, ‘Jump’ = 40, Up = 46, Down = 48, ‘More’ = 50, ‘Save’ = 52, ‘Canc’ = 60 thru ‘Yes’ = 64.

All Houston Controllers respond slightly differently to MIDI 1v0 spec:
When MSB controller is sent, Houston waits for the matching device (Fader or Rot-Encoder) # LSB before setting its value, subsequent LSBs sent will change the LSB value
Note: Controller MSB only will not change values (this would clear the LSB resulting in poor resolution/LED flicker).

8 x Rotary Encoders send MIDI ‘Controller’ ‘0xB0’, Rot-Enc #1.8 = 10.17 = MSB, 42.49 = LSB, Absolute position 0…16K (14 bit MIDI MSB/LSB data) the number of ‘clicks’ per revolution is set by Sys-Ex message, it should be set to match the LED display mode which is also set by Sys-Ex message
i.e.: ‘Frequency’ LED display has 57 positions
‘Boost/Cut’ LED display has 17 positions
‘Q’ LED display has 15 positions
‘Q’ LED display has 17 positions with ‘LPF/HPF shelving’ at end
HPF/LPF LED display has 30 positions
On/Off LED display has 2 positions
Rot-Enc absolute position 0 = all 15 LEDs Off, with ‘Q’ display @ 15 clicks/rev all 15 LEDs will light when Rot-Enc abs pos = 16k, Rotary-encoder values are sent every 5mS minimum if req’d

Houston 9 x Faders send MIDI ‘Controller’ ‘0xB0’, Fader # 1…9 = MSB, 33…41 = LSB, Absolute position 0…16K (14 bit MIDI MSB/LSB data) Fader position values are sent every 15mS minimum if lots of movement (9 faders = 4 x MIDI values each = 36 x 0.33mS = 12mS of MIDI data if all faders moved at once !) The 9 x Fader ‘Touch’ send MIDI ‘Controller’ ‘0xB0’, Group #24, Fader # 1…9 x 2 , bit0 = Set = Fader Tang touched, Fader ‘Touched’ values are sent every 15mS

The Jog Wheel has 80 clicks per revolution, it sends MIDI ‘Controller’ ‘0xB0’, Group # 19, Time since last changed (in mS) 1…126, Changed value ± 0…63, time = 127 = slowest detectable rotation speed = 9 seconds per rev
Messages displayed on 2 x 40 char LCD are either ‘Built in’ selected by Sys-Ex, or Sys-Ex ASCII string @ position (see ‘Houston.h’ System Exclusive specification document)

If MIDI active sensing ceases after valid active sensing, all the buttons LEDs will be switched Off (in case bad MIDI connection had light spurious button LEDs)
When VST receives MIDI active again (or initially) from Houston it must initialise the current patch to Houston.
Status flag sent to VST when requested, reflects real time events since last read:
FROM Houston, Red LED near CPU flashes # of times to indicate a bit is set - Error information returned, ‘Sticky’ status flags are all cleared when sent to VST in responses to Sy-Ex request
EEPROM_WRITE_ERR 0x1 // bit 0 DynamicErrors[0] VST error flag = EEPROM blow timed out error
EEPROM_CHKSUM_ERR 0x2 // bit 1 DynamicErrors[0] VST error flag = EEPROM checksum error
EEPROM_READ_ERR 0x4 // bit 2 DynamicErrors[0] VST error flag = EEPROM read error
MIDI_OVERFLOW_ERR 0x8 // bit 3 DynamicErrors[0] VST error flag = MIDI Rx error overflow buffer flag
MIDI_HARDWARE_ERR 0x10 // bit 4 DynamicErrors[0] VST error flag = MIDI Rx Hardware error (check MIDI lead & connections)
MIDI_SENSE_ERR 0x10 // bit 5 DynamicErrors[0] VST error flag = MIDI active sensing timout < 1 second (Inactive until ‘Active Sensing’ 1st Status received) resets MIDI buffers if times out

Status flag sent to VST when requested, reflects Houston state since power on: (Not cleared when read)
ButMuxFail = VSTErrStickyBits bit 0 = Power On Self Test button matrix ‘Stuck or Ribbon not connected button’ check failed
ButLedLight = VSTErrStickyBits bit 1 = Houston running in test mode, Light LED under button when depressed (Stays in this mode until power Off)
TouchCalibrateError= VSTErrStickyBits bit 2 = Houston failed calibratechecks
FaderCalibrateError= VSTErrStickyBits bit 3 = Houston failed calibratechecks
ManifMode = VSTErrStickyBits bit13 = ‘Manifacture mode’ 2 pin link applied at power on, Yellow LED will be lit until power off.

All MIDI messages sent to VST use ‘Running Status’, the MIDI status byte will be Re-sent every second (When MIDI data req’d) to ensure data is understood when the VST program is started.

The 9 x Faders send MIDI ‘Controller’ MSB/LSB absolute position as 0 to 14bit (0…16K) unsigned data, this has 10bit precision when moving & 14bit averaged when slowly moved or stationary.

The 8 x Rotary-Encoders send MIDI ‘Controller’ MSB/LSB absolute position as 0 to 14bit (0…16K) unsigned data.
When Houston is receiving Rot-Enc position data the Rot-Enc LED only moves when the LSB data is received (if it moved when the MSB was received then the LED position would flicker if the data was slow to be received)

The Jog wheel sends MIDI ‘Controller’ ±63 (Bit6 = sign) relative position in Rot-Enc ‘clicks’ + time (Max = 127mS = 10Secs/rev ) since last value sent (Alps encoder = 80 clicks per rev)

MIDI ‘Power down’ command switches LCD backlight and all LED & motors Off, Time is also stored in EEPROM.

1 Like