Taming Arturia’s Beatstep: Sysex codes for programming via iPad

Arturia Beatstep in sequencer mode (animated GIF)Nice. New. Toy. Arturia’s Beatstep controller is a steal for 99 Euros – it just feels great. Large, solid pads, smooth, reassuring encoders. Did I mention there’s a 16-step sequencer included? And a CV/gate interface? Must-have. I sold my QuNexus for this.

Just like the QuNexus, it is an ideal extension for iPad music. And just like the QuNexus, Beatstep needs to be programmed via a controller program to work. At least Arturia had the common courtesy to include a Mac version of the controller software, still it is a nuisance for iPad users like me that they have to use a computer just because one key sends the wrong note and triggers the wrong event.

So I thought about building a small controller panel for TB Midi Stuff, the same app I used for my Matrix-1000 controller. A bit of work with the controller software and a MIDI monitor gave me what is needed for that: the Sysex codes to control the Beatstep’s behaviour. May be some time until I get round to building that panel, in the mean time there you are. You’ll find the very first version of my iPad Beatstep Tool for download in the TB Midi Stuff forum. No, don’t thank me, Arturia.

Anyway, here’s the MIDI command table for the Beatstep, in case you want to do your own programming.
V1.3, last update 10 November 2016, with lots of additional info by Richard Wanderlöf.

Controller Parameter Send and Request

The sysex implementation is very granular. Every individual parameter for every individual controller can be requested or sent by one command.

Sending a parameter

This is the generic command string to set an individual parameter:

F0 00 20 6B 7F 42 02 00 pp cc vv F7
  • pp is the number of the parameter that is to be set – from 1 to 6. (Arturia’s MIDIControlCenter software always transmits all six of them, but I guess you can send them individually. First things first though: parameter 1 sets the mode of a controller.)
  • cc is the number of the controller in question: 0x20-0x2F addresses one of the sixteen encoders, 0x70-0x7F addresses one of the sixteen pads. The volume controller has number 0x30 and behaves like any other encoder. The Stop button has 0x59, the Play button has 0x58 – and just like the sixteen pads, you can program them to mean about everything. You probably shouldn’t.
  • vv is the value for this parameter, e.g. the MIDI channel the control should send on.

Sending a string of this format to the BeatStep sets the addressed parameter for the addressed controller with the addressed value.

Requesting a parameter

To find out about the actual value for this parameter, you can send a request string:

F0 00 20 6B 7F 42 01 00 pp cc F7

The BeatStep will answer with a Sysex string in the format mentioned above. AFAIK you’ll have to wait for the BeatStep to respond before sending the next request, or the poor thing will be rather confused and ignore some messages.

There are also a few global control strings, they have a slightly different format and are listed further down.

Let’s have a look at the parameters and their possible meanings.

Sysex for the Pads

The pads 1-16 have controller numbers 0x70 to 0x7F.

The function buttons can be programmed just like pads. Unlike pads, they  they retain their original function even when programmed, so that for instance PLAY will still start the sequencer as well as output CC if it is programmed to do so. They cannot produce aftertouch signals either. Their controller numbers are: Stop (0x58), Start (0x59), Cntrl/Seq (0x5A), Ext. Sync (0x5B), Recall (0x5C), Store (0x5D), Shift (0x5E), Chan (0x5F). – H/T for this info goes to Ricard Wanderlöf.

Pads work in one of five mode: as MMC start/stop buttons, as switched MIDI CCs (think sustain pedal) with or without local LED feedback, as MIDI note key, or as Program Change buttons.

The first parameter determins the mode:

  • F0 00 20 6B 7F 42 02 00 01 cc vv F7

cc is the controller you like to program, vv sets the mode: 0=off, 1=Silent CC Switch, 7=MMC, 8=CC Switch, 9=Note, 0x0B=Program Change. Hm. Makes you wonder which modes the missing values might activate.

Parameters for the known modes:

MMC Mode (vv=7)

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 07 F7.

Setting the parameter:

  • MMC command: F0 00 20 6B 7F 42 02 00 03 cc vv F7 (vv: 1=Stop, 2=Play, 3=Deferred Play, 4=FastForward, 5=Rewind, 6=Record Strobe, 7=Record Exit, 8=Record Ready, 9=Pause, 10=Eject, 11=Chase, 12=InList Reset)

CC Switch Mode (vv=8)

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 08 F7.

Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…

  • 02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
  • 03 cc vv F7 to set the CC (vv from 0-127)
  • 04 cc vv F7 to set the Off value (vv from 0-127)
  • …05 cc vv F7 to set the On value (vv from 0-127)
  • …06 cc vv F7 to set the behaviour: 0=Toggle, 1=Gate

Toggle means that one push switches the button on, the next switches it on, while Gate sends On as long as the button is pressed.

Silent CC Switch Mode (vv=1)

Works just like CC, but doesn’t light up the (red) pad LED while it is pressed, unlike the CC (vv=8) mode. Use this if you want to use the LED for feedback. (Found out by Ricard Wanderlöf.)

Note Mode (vv=9)

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 09 F7.

Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…

  • 02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
  • 03 cc vv F7 to set the note (vv from 0-127, C0=18)
  • …06 cc vv F7 to set the behaviour: 0=Toggle, 1=Gate

Toggle means that one push switches the button on, the next switches it on, while Gate sends On as long as the button is pressed.

Aftertouch (channel pressure) is transmitted in Gate mode only. In Toggle mode, velocity is transmitted with Note On and Note Off messages.

Program Change Mode (vv=0B)

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 0B F7.

Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…

  • 02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
  • 03 cc vv F7 to set the actual Program Change value (0-127)
  • …04 cc vv F7 to set the Bank LSB (0-127).
  • …05 cc vv F7 to set the Bank MSB (0-127).

Please note that PC mode is transmitting full MIDI PC messages, including a 14-bit bank value.

Switching the LEDs on and off

Every pad has a red and a blue LED, you can only control the red LED directly. It responds to MIDI notes just like any MIDI instrument – but:

LED feedback only works if a pad is in Note mode. In that mode, it is responding to that very same note it is sending when pressed. Meaning that you’d have to set the correct mode for pad 1:

F0 00 20 6B 7F 42 02 00 01 70 09 F7

And then set the note the pad should correspond to, here: C1

F0 00 20 6B 7F 42 02 00 03 70 24 F7

(Let’s assume we are sending on MIDI Channel 1, I’ll leave that bit out here)
Now you can switch the LED

ON:  90 24 7F
OFF: 90 24 00

Sysex for the Encoders

The encoders 1-16 have controller numbers 0x20 to 0x2F, the large volume dial has controller number 0x30.

Encoders work either as MIDI CC controllers – one of 120 controllers that can be assigned any value, as long as it’s between 0 and 127 – or as the more modern RPN/NRPN controllers that are used by many machines to control internal parameters.

The first parameter determins the mode:

  • F0 00 20 6B 7F 42 02 00 01 cc vv F7

cc is the controller you like to program, vv sets the mode: 0=off, 1=Midi CC, 4=RPN/NRPN. Once again, guesswork about modes 2 and 3.

CC Mode (vv=1)

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 01 F7.

Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…

  • 02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
  • 03 cc vv F7 to set the CC number that is used.
  • 04 cc vv F7 to set the lowest possible value (Absolute mode only)
  • 05 cc vv F7 to set the highest possible value (Absolute mode only)
  • …06 cc vv F7 to set the behaviour: 0=Absolute, 1-3=Relative mode 1-3.

The relative encoder modes send a delta value rather than an absolute CC. The difference between relative modes 1, 2 and 3 are which value the output is centered around. The center values are 64, 0 and 16, respectively. I.e. for RELATIVE1, turning a knob (slowly) clockwise yields 65, turning it anticlockwise yields 63. For RELATIVE2 it would be 1 and 127 respectively. Turning a knob faster yields higher delta values (knob acceleration).

RPN/NRPN Mode (vv=4)

RPN/NRPN are command sets to address the limits of CC messages: they can control more parameters (16384 instead of 127) more precisely (with a value range from 0 to 16383). In theory, at least, as even a Beatstep encoder set to (N)RPN will only transmit values between 0 and 127.  A good description of RPN/NRPN messages here.

Invoked by F0 00 20 6B 7F 42 02 00 01 cc 04 F7.

Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…

  • 02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
  • 03 cc vv F7 to set Coarse/Fine: 0x06=Coarse, 0x26=Fine (this actually determins whether the MSB or the LSB of the parameter is sent)
  • 04 cc vv F7 to set the Bank LSB of the parameter to be sent
  • 05 cc vv F7 to set the Bank MSB of the paramter to be sent
  • …06 cc vv F7 to set the type: 0=NRPN, 1=RPN

Global settings

  • Global MIDI channel – F0 00 20 6B 7F 42 02 00 50 0B nn F7 (MIDI channel-1, 0-15)
  • CV/Gate interface receive channel – F0 00 20 6B 7F 42 02 00 50 0C nn F7 (MIDI channel-1, 0-15)
  • Knob acceleration – F0 00 20 6B 7F 42 02 00  41 04 nn F7 (0=slow, 1=medium, 2=fast)
  • Pad velocity curve – F0 00 20 6B 7F 42 02 00  41 03 nn F7 (0=linear, 1=logarithmic, 2=exponential, 3=full – I prefer exponential).

Programming the sequencer

Control strings for the sequencer are of the format:

F0 00 02 6B 7F 42 01 00 pp ss vv F7
  • pp is the parameter – 0x50, 0x52, or 0x53. 0x52 is the MIDI note of this step, 0x53 switches the step on (0x7F) or off (0x00), 0x50 is used for the sequencer’s global parameters – see below.
  • ss is the number of the step you are changing – as the sequencer features 16 steps this can take values between 0x00 and 0x0F (0-15). 
  • vv is the value for this parameter, e.g. the MIDI channel the control should send on.

The request string for the sequencer is:

F0 00 02 6B 7F 42 01 00 pp ss F7

Global Sequencer settings

The global settings of the sequencer follow the same pattern explained above

  • MIDI channel – F0 00 20 6B 7F 42 02 00 50 01 nn F7 (channel-1, 0-15)
  • Transpose – F0 00 20 6B 7F 42 02 00 50 02 nn F7 (base note is C5= 0x3C, to transpose down 12 semitones to C4, nn=0x30 and so on)
  • Scale: F0 00 20 6B 7F 42 02 00 50 03 nn F7 (0=chromatic, 1=Major, 2=Minor, 3=Dorian, 4=Mixolydian, 5=Harmonic Minor, 6=Blues, 7=User)
  • Mode: F0 00 20 6B 7F 42 02 00 50 04 nn F7 (0=forward, 1=reverse, 2=alternating, 3=random)
  • Step size: F0 00 20 6B 7F 42 02 00 50 05 nn F7 (0=1/4, 1=1/8, 2=1/16, 3=1/32)
  • Pattern length: F0 00 20 6B 7F 42 02 00 50 06 nn F7 (1-16 steps, 1-0x10).
  • Swing: F0 00 20 6B 7F 42 02 00 50 07 nn F7 (no swing = 0x32 or 50%, maximal swing = 0x4B or 75%.)
  • Gate: F0 00 20 6B 7F 42 02 00 50 08 nn F7 (0-0x63 for 0-99%)
  • Legato: F0 00 20 6B 7F 42 02 00 50 09 nn F7 (0=off, 1=on, 2=reset)

Storing/Recalling a Preset

The BeatStep features 16 preset memories. Each preset stores a full set of parameters, i.e. all controllers, all sequencer steps. These commands store/recall the parameters into the BeatStep’s working memory:

Store Command:

F0 00 20 6B 7F 42 06 mm F7

…stores the actual settings for the controllers and the sequencer (i.e. the working memory) to memory bank mm (1-16).

Recall Command:

F0 00 20 6B 7F 42 05 mm F7

…recalls the settings from memory bank mm.

Please note that the recall sequence does not initiate a parameter dump – if you want to read out a memory bank, you’ll have to recall it first, then request and read each parameter individually.

Verwandte Artikel:

21 Gedanken zu „Taming Arturia’s Beatstep: Sysex codes for programming via iPad

  1. I find this article very interesting.
    Specialy cause it opens the door to customizing my arturia.
    Would you know by any chance if there is a way to light up a pad with a certain color via sysex?
    I would really appreciate your help on this.

    Thanks in advance.

    • Only thing I know is that the pads respond to MIDI Note On signals – when I use the BeatStep with iMPC Pro, the pads light up like a christmas tree. In red.. I have not found a way to trigger the blue LED yet – maybe they are reserved for the step sequencer and cannot be triggered from the outside.

  2. Some things I’ve discovered after som further experimentation:

    The CNTRL/SEQ, EXT.SYNC, RECALL, STORE, SHIFT and CHAN buttons can also be programmed just like STOP and PLAY, using controller codes 0x5a..0x5f. Like STOP and PLAY, they retain their original function even when programmed, so that for instance PLAY will still start the sequencer as well as output CC if it is programmed to do so.

    Also, when using vv=1 to set a button mode, it works just as CC, but doesn’t light up the (red) pad LED while it is pressed, unlike the CC (vv=8) mode.

    The relative encoder modes send a delta value rather than an absolute CC. The difference between relative modes 1, 2 and 3 are which value the output is centered around. The center values are 64, 0 and 16, respectively. I.e. for RELATIVE1, turning a knob (slowly) clockwise yields 65, turning it anticlockwise yields 63. For RELATIVE2 it would be 1 and 127 respectively. Turning a knob faster yields higher delta values (knob accelleration).

  3. Pingback: Skip the Computer: BeatStep, Programmed with iPad, SysEx Hack - Create Digital Music

  4. Thanks for sharing the BeatStep SYSEXs.

    Is there a way to set the initial value of a CC knob (in absolute mode) ? I try sending MIDI CC to the knob (MIDI IN of the BEatStep) but it does not seem to work. By initial value I mean the cc value that will be send when the knob is first turned.

      • I have a Beatstep Pro and I’ve tried some of your Beatstep Sysex commands with the BSP. By sheer luck I’ve found out how to set the initial value of a knob:

        F0 00 20 6B 7F 42 02 00 00 2x vv F7

        with x being the knob number 0 to F and vv being the value to send to the knob. Hope this helps with the Beatstep too.

        Would be great to find a similar way to set the values for the BSP’s Step buttons while in Control mode, and of course, switiching their LEDs on and off…

  5. Hello and greetings from India,

    This is such a brilliant source of info for Beatstep (that sadly Arturia does not care much about now)
    I had a question though:
    This blog says that LED feedback from MIDI out can be enabled via Sysex command
    (for pad 0x70)
    F0 00 20 6B 7F 42 02 00 01 70 01 F7

    I tried Midi-Ox and sent above Sysex cmd but Beatstep didn’t respond and the pads got no feedback. They still light up when pressed.
    I plan on sending feedback from Traktor Pro to control the LED behaviour. Traktor can only send MIDI out though. I thought may be if I turn off local feedback, leds can be controlled by sending the same note through MIDI out.

    Please let me know if I am doing something wrong.

    • LED feedback only works if a pad is in Note mode. In that mode, it is responding to that very same note it is sending when pressed. Meaning that you’d have to set the correct mode for pad 1:

      F0 00 20 6B 7F 42 02 00 01 70 09 F7

      .

      And then set the note the pad should correspond to, here: C1

      F0 00 20 6B 7F 42 02 00 03 70 24 F7

      .

      (Let’s assume we are sending on MIDI Channel 1, I’ll leave that bit out here)

      Now you can switch the LED

      ON:  90 24 7F
      OFF: 90 24 00

      I’ll put that info into the document.

      • Hello untergeek,

        I did try out the new instructions and yeah the pads to light up as expected.

        However, there is one caveat.

        I will explain my situation with an example:

        I have mapped pad 1 to play/pause track in traktor.
        I have also mapped a midi out to light up the pad if the play is on.

        Now the pad lights up perfectly fine if I am click on play from within traktor on the laptop and it shuts down when I click pause on the laptop.
        However, it does not light up if I tap on pad 1 to play the track on traktor.

        Do you have any idea, why is it so?
        Is it because, when I tap on the pad it exhibits the default behaviour of lighting up the led and when i remove my finger it shuts the led down?
        Is there any way to fix this?

        • Sorry for the late reply, overlooked this. And I’m afraid I can’t really help you – I guess that maybe Traktor does not echo the note you sent from the Beatstep but sent it when you clicked on the laptop. One would have to look with a MIDI monitor to confirm this…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.