Non-standard CC messages insight

Ensoniq have very funky requirements on some of their synths to remotely control parameters.
Fortunately the VFX is pretty simple, here’s the format for CC
vfxCCspec

And here’s an example from the manual on params

I’m having trouble wrapping my head around how I can get E1 to transmit a HI and LO byte from a standard fader.
Will I need Lua for this? I’m pretty well versed in JS but need some conceptual help on how to approach the problem.

Currently away from the synth so I’m not able to throw messages at it and see what happens.

Hey, I think this are not CC messages but but sysex.
See my ensoniq Mirage Soundprocess template howto send 2 byte nibles.

https://app.electra.one/preset/AEiyvOSOCOuONNkZG0Xp

example json for sysex

[
  "00",
  "00",
  "23",
  "01",
  "43",
  "55",
  {
    "type": "value",
    "rules": [
      {
        "parameterNumber": 1,
        "parameterBitPosition": 0,
        "byteBitPosition": 0,
        "bitWidth": 4
      }
    ]
  },
  {
    "type": "value",
    "rules": [
      {
        "parameterNumber": 1,
        "parameterBitPosition": 4,
        "byteBitPosition": 0,
        "bitWidth": 4
      }
    ]
  }
]

Hope this helps

Cheers

2 Likes

Thanks Flyweight, it seems I have a gap in knowledge of sysex and cc. I’ll try modify what you’ve done and get something out of it!

1 Like

I will first just send 1 sysex command to change 1 parameter,
Maybe scroll the web or get it from the manual.
Then keep sending that message and see if it changed on the sampler.
Once you got it you can start building your template.

I have a Mirage which is much older, you need to put it in CC (computer control mode) in order it to listen to sysex.

Anyhow that is the way I did it.

2 Likes

I don’t have any Ensoniq so I checked the VFX manual. Appendix A.

When you set up your sysex controller, don’t forget:

  • start with the fixed bytes of the VFX header (paragraph 2.1), but leave out the F0 start byte
  • the fourth byte is dependent on the midi channel. Make sure eventually you use a function to set that value , not a fixed value. Otherwise, you’ll have to redo all your controls if ever you decide to change the Midi channel
  • byte 5 is always 01 for parameter changes
  • then come the 3 bytes that define the parameter. But are they send as 3 bytes? Or as 6 bytes containing 6 nibbles of 0 and 6nibbles with the value?
  • for the value bytes, start with the Hi byte always on 0.

The manual isn’t very clear which bytes are sent as 2 nibbles and which aren’t. I also could not find how it will interpret negative values

The best way forward is to have the VFX transmit a chosen parameter change, and you capture that SysEx message via Midi-Ox or similar. Then you can check the used midi composition for yourself, before you start creating one you sent into the VFX

Also: this VFX Sysex is doable but not a simple one. You definitely will need some lua to make it run.
First find some tutorials on Midi v1 and learn about the difference between CC, RPN, NRPN and SysEx. Believe me, that is no waste of time :slight_smile:

If you have a synth that has a more straightforward SysEx , perhaps try that one first.

Yeah definitely not so easy and I agree it would be better to start with something simpler.
But nevertheless lets change the cutoff from the filter :slight_smile:
I can help a little so lets see if we can make it.

I suggest to:

  1. make 1 parameter change work
  2. make a template
  3. add lua code for a midi channel change ( I have it in another template see Ensoniq Mirage )
  4. add the voice select if needed…

I do not not how the synth works.
Its not clear what a “voice” means.
I t could be you need to send a voice select command before changing the parameter,
But you can do this on the synth itself. You have to tell us this.

F0 
0F 
05 
00 
{midichannel} 00 could be channel 1 not sure
{messagecommand type} 01
{voicenumber} [0..5]
{parameter pagenumber} [0..31]
{parameter slot number} [0..5]
value hi byte [0..255]
value lo byte [0..255]

Lets change the boss parameter:
page 13, slot 1 [0.127] Filter #1 Cutoff

So first send:

filter#1 filter fully closed
"0F", "05", "00", "00", "01", "00", "13", "01", "00" "00"

You can use sendmid GitHub - gbevin/SendMIDI: Multi-platform command-line tool to send out MIDI messages

sendmidi dev YourMidiPort syx 0F 05 00 00 01 00 13 01 00 00

also run recievemidi on another terminal.
Here you can catch the response.

If it worked you can use this in your template.
The example should be used for "parameterNumber": 1,
Edit to your needs.

[
  "0F",
  "05",
  "00",
  "00",
  "01",
  "00",
  "13",
  "01",
  {
    "type": "value",
    "rules": [
      {
        "parameterNumber": 1,
        "parameterBitPosition": 0,
        "byteBitPosition": 0,
        "bitWidth": 4
      }
    ]
  },
  {
    "type": "value",
    "rules": [
      {
        "parameterNumber": 1,
        "parameterBitPosition": 4,
        "byteBitPosition": 0,
        "bitWidth": 4
      }
    ]
  }
]

Cheers

Tim

2 Likes