# Novation BassStation Rack
MIDI controlled analogue synthesizer from the 1990s.
# 1 Specifications
- 1U rackmount module, lots of knobs
- MIDI in out thru
- mono audio in (to filter) out
- cv + gate in out
- 2 oscillators (including pwm and osc sync)
- 1 lfo (including tempo sync)
- 2 envelopes (amplitude, modulation)
- 1 low pass filter (12dB and 24dB modes)
- 2 digit display with keypad to edit patches
- 40 presets in ROM, 60 user presets in flash
# 2 User Manual
Widely available online:
- https://downloads.novationmusic.com/novation/synthesisers-legacy/bass-station-rack
- https://archive.org/details/synthmanual-novation-bass-station-rack-owners-manual
- …
Does not document MIDI system exclusive messages (sysex).
# 3 Patch Editors
# 3.1 Max For Live
# 3.2 Electra One
- https://app.electra.one/preset/5a6K2hW903q7nxXE1zmL
- needs website registration to get download link
- implemented in JSON and Lua
# 3.3 Classic Amiga
- https://aminet.net/package/mus/midi/cha_bsr
- made by me in 1999-2000
- includes source code in Amiga E
- originally developed using official sysex format specifications (which I probably no longer have)
# 4 MIDI Implementation
# 4.1 Controls
See user manual pages 18 and 21.
# 4.2 SysEx
# 4.2.1 Dump Request
There is a message that can be sent to the synth to tell it to dump a patch to its output. Alas I do not have the details.
# 4.2.2 Single Patch
BassStation Rack single patch format (sent and received).
(The synth also supports BassStation keyboard format with some data loss due to hardware differences, but I do not have the details.)
Adapted from cha_bsr/source/bsrtone.e, which was based
on official documentation back in the day. however, mistakes may have
been introduced in translation, so use at your own risk.
| offset | data* | value* | range | parameter | notes |
|---|---|---|---|---|---|
| 0 | F0 00 20 29 01 03 22 | start of sysex | |||
| 7 | 0x 0y | xy | 00-FF | portamento | |
| 9 | 0x 0y | xy | 00-FF | osc2finetune | |
| 11 | 0x 0y | xy | 00-FF | osc2semitone | quantized to 0-C |
| 13 | 0x 0y | xy | 00-FF | oscmix | |
| 15 | 0x 0y | xy | 00-FF | osc1env | |
| 17 | 0x 0y | xy | 00-FF | osc1lfo | |
| 19 | 0x 0y | xy | 00-FF | osc1pwm | |
| 21 | 0x 0y | xy | 00-FF | lfofrequency | |
| 23 | 0x 0y | xy | 00-FF | lfodelay | |
| 25 | 0x 0y | xy | 00-FF | filterfrequency | 40-C7 in 12dB mode |
| 27 | 0x 0y | xy | 00-FF | filterresonance | |
| 29 | 0x 0y | xy | 00-FF | filterlfo | |
| 31 | 0x 0y | xy | 00-FF | env1attack | |
| 33 | 0x 0y | xy | 00-FF | env1decay | |
| 35 | 0x 0y | xy | 00-FF | env1sustain | |
| 37 | 0x 0y | xy | 00-FF | env1release | |
| 39 | 0x 0y | xy | 00-FF | env1velocity | |
| 41 | 0x 0y | xy | 00-FF | env2attack | |
| 43 | 0x 0y | xy | 00-FF | env2decay | |
| 45 | 0x 0y | xy | 00-FF | env2sustain | |
| 47 | 0x 0y | xy | 00-FF | env2release | |
| 49 | 0x 0y | xy | 00-FF | env2velocity | |
| 51 | 0x 0y | xy | 00-FF | osc2env | |
| 53 | 0x 0y | xy | 00-FF | osc2lfo | |
| 55 | 0x 0y | xy | 00-FF | osc2pwm | |
| 57 | 0x 0y | xy | 00-FF | filterenv | |
| 59 | 0x | 0x | 00-0F | modpitch | |
| 60 | 0x | 0x | 00-0F | modfilter | |
| 61 | 0x | Sx | F9-07 | pitchbreath | -7 to +7 |
| 62 | 0x | Sx | F9-07 | pitchaftertouch | -7 to +7 |
| 63 | 0x | Sx | F9-07 | filterbreath | -7 to +7 |
| 64 | 0x | Sx | F9-07 | filteraftertouch | -7 to +7 |
| 65 | 0x | 0x | 00-0F | egbiasbreath | 0 to 15 |
| 66 | 0x | 0x | 00-0F | egbiasaftertouch | 0 to 15 |
| 67 | 0x 0y | xy | 00-FF | pitchbend | 00-0C |
| 69 | 0x 0y | xy | 00-60 | lfoclock | 24ppqn; 0,2,3,4, 6,8,9,12, 16,18,24,32, 36,48,72,96 |
| 71 | 0000xyyz | x | 0-1 | osc1wave | 0=square, 1=saw |
| yy | 0-3 | osc2range | 0=16, 1=8, 2=4, 3=2 | ||
| z | 0-1 | osc1wave | 0=square, 1=saw | ||
| 72 | 0000xyzz | x | 0-1 | filtermod | 0=lfo, 1=env2 |
| y | 0-1 | filtertype | 0=24dB, 1=12dB | ||
| zz | 0-2 | lfowave | 0=random, 1=triangle, 2=saw | ||
| 73 | 00000xyy | x | 0-1 | oscsync | 0=off, 1=on |
| yy | 0-3 | triggertype | 0=polyphonic, 1=multi, 2=single, 3=autoglide | ||
| 74 | 0000xxyy | xx | 0-2 | osc1pwmtype | 0=lfo, 1=manual, 2=env2 |
| yy | 0-2 | osc2pwmtype | 0=lfo, 1=manual, 2=env2 | ||
| 75 | F7 | end of sysex |
76 bytes total message length
*data: 2 characters hexadecimal (4 bits per character), 8 characters binary (1 bit per character)
*value: S sign extend from 4 bits
# 4.2.3 Complete Bank
Sends all user presets and some extra bits. Message format unknown.
Warning receiving overwites everything regardless of write projection switch.