Novation bass station

Hello,
I’m working on a preset for the Novation Bass Station, here it is (limited CC version)

For now, it is composed of CC faders, but I’m working on a Sysex version to get full control on all parameters. Because there is no sysex chart on the web for the Bass Station (v1), I did a bit of retro engineering based on that max for Live plugin: Bass Station Max for live

Everything is alright regarding the faders but I’d like some “basic” help for the switches. There are 8 switches. They are sharing the same byte by group of 3 or 2. I guess I need to make a LUA function for an addition of the values by group of switches, right? For instance, group 1:

  • OSC 1 Waveform values: 8 or 0
  • RANGE: 6, 4, 2 or 0
  • OSC 2 Waveform: 1 or 0
  • byte for this group is an addition of these 3 values

I guess it’s fairly easy, but I’m not used to the LUA language. If anyone is interested, here is WIP version: Bass Station WIP sysex preset

Thanks!!
Have a nice day

1 Like

yes, you’ll need to give the same lua function to all parameters that will control the same byte.

Each time you change one of these parameters, that function must be called. In the function you recall each of these (virtual) parameter values and reconstruct the byte you need.
Then you send that byte by CC , NRP or sysEx, whatever it is supposed to be

Have a look at my Waldorf Pulse 2 preset Electra One App

You’ll find such a function in there, that I needed to recall for each of the ARP steps. Per step the event value, time value and glide on/off bit are recombined before sending off to the synth.
Out of the valueObject I retrieve the exact ARP step that must be recombined, hence the step variable. I’ve paid attention to the numbering of my virtual parameters, so this step value can be deducted. The variable result is the byte I needed to construct and send.

function packedParam(valueObject) -- 0x5A = step 1
  local message = valueObject:getMessage ()
  local paramNum = message:getParameterNumber ()
  local step = paramNum % 20 -- take the modulo of the parameter 
  local result = 0
  result = result + parameterMap.get (deviceId, PT_VIRTUAL, 12060+step) * 2^0 -- event value
  result = result + parameterMap.get (deviceId, PT_VIRTUAL, 12080+step) * 2^4 -- time value
  result = result + parameterMap.get (deviceId, PT_VIRTUAL, 12100+step) * 2^6 -- glide on/off
  --print ("packedParam= "..result)
  midi.sendSysex (devPort , { 0x3E,  0x16,  sysexDeviceID,  0x20,  89+step,  result})  
end
1 Like

Many thanks @NewIgnis,
you put me on the path I was looking for. I did it another way nonetheless. Your coding skills are beyond mine by far. I did prefer to make 4 functions, one per switches group, and use them in the sysex editor for all controllers. The end of the JSON looks like that:

 (....),
  "00",
  {
    "type": "function",
    "name": "getSwitchesGroup1Values"
  },
  {
    "type": "function",
    "name": "getSwitchesGroup2Values"
  },
  {
    "type": "function",
    "name": "getSwitchesGroup3Values"
  },
  {
    "type": "function",
    "name": "getSwitchesGroup4Values"
  },
  "F7"
]

Thanks again !!

1 Like

The preset is operational, I’ll do the patch request part later. Thanks again!

PS: I’ve discovered some hidden parameters that I’m going to add (such as Midi to LFO clock rate for instance). I have to do some retro engineering since they are obviously not documented anywhere.

1 Like

Hello,
the preset is fully operational. I did change everything from the sysex editor to a single LUA function. The preset was way too heavy before and was not uploading anymore to the E1 (JSON had more than 30k lines!! Only 2K now plus 400 lines for the LUA). Sooner or later, I may add some internal functions to the main one to lighten the LUA code a bit more.

Again, a big thank to @NewIgnis (I may ask you for a bit of help in a near future on the patch request part)

1 Like

Hello,
I’m working on the patch request/response. I have several issues:

  • MAIN ISSUE: while working on the mapping, the response is working. I’m able to retrieve correctly all values. I must to be under the SAVE menu on the Bass Station, and to push the SAVE button. Problem is that, when leaving the preset editor and upload again the preset to the E1, nothing is working anymore… I don’t get why. (Only thing I can see I that the parameters in the mapping menu have no green check mark, and I don’t get why)
  • SECONDARY ISSUE: I thought I found the way to make the request working, but not really. I mean, when I send: F0 00 20 29 01 03 00 40 F7, the Save menu on the Bass Station is flashing (so there is a kind of reaction at least), but the Bass Station is not really responding by sending any Midi message back…

If anyone could help me, I would appreciate it a lot :slight_smile:
@NewIgnis may be?

Take a screenshot of the part where you define the requesting sysex please, so we see exactly what and how you transmit.

Thanks @NewIgnis, I learned a lot on my Juno 106’s preset yesterday evening. I’m going to apply my discoveries on the Bass Station’s one before going further with my questioning.

1 Like

MAIN ISSUE:
Well, still some strange behaviors regarding the responses but it is actually working though (yet, the parameters in the mapping menu have no green check marks) :

  • when working on a preset on the response mapping, it is sometimes working, sometimes not. When it is working values are for most of them well retrieved, except for the lists when trying to retrieve a value equal to 0 (did not try the pads, but I prefer the lists even when there are only two states)
  • when uploading the preset after opening it on the web editor, it is not working anymore
  • to make the responses working (do not solve the 0 value on list issue though) I have to:
    1 - unplug the E1 from my computer
    2 - plug it in an USB socket (stand alone mode)
    3 - change the preset to another one before coming back to it

I’m pretty sure that changing the preset to another one on the E1 before coming back to it should be enough, but I did not try it yet.

Do you consider all these behaviors as a bug or not? Should I move the topic to the bug reports’ discussions? We can live with that actually.

SECONDARY ISSUE:
More a problem than an issue. I can live without solving it. Still I feel that I’m on the good path since the Bass Station’s digit screen is flashing when receiving F0 00 20 29 01 03 00 40 F7
But there is no feedback afterwards, and the flashing eventually stops. I tried this sysex message after reading this page, StudioCode - Novation Bass Station 2 SysEx format where we can read:

SysEx messages understood by the Bass Station II

Message Description
F0 00 20 29 00 33 00 40 F7 Request for SysEx. After receiving this message, the Bass Station II will send a SysEx dump of its current configuration.

‘00 20 29’ stand for Novation’s ID, by deduction I thought that ‘00 33’ were for the model (here the Bass Station II) and ‘00 40’ for the request. Therefore I tried the same message, changing only the model’s part…
I guess we’ll never know since there is no informations on the “Bass Station 1” on the web, only ones are for the “Bass Station 2”.

NEW ISSUE:
0 value is not retrieved with mapped responses