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.

[toc]

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 (0x32-0x63 for ??-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:

65 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.

      • Send this sysex message to Arturia MiniLab mkII MIDI output port (I have used MIDI-OX)

        F0 00 20 6B 7F 42 02 00 10 7n cc F7

        where:
        n is the pad number, 0 to F, corresponding to Pad1 to Pad16
        cc is the color:
        00 – black
        01 – red
        04 – green
        05 – yellow
        10 – blue
        11 – magenta
        14 – cyan
        7F – white

        • Thanks for posting this! I want to note that with the normal beatstep I think the only colors available are black, red, blue and magenta. I tried all possibilities and those are the only ones that showed up.

    • Thanks for the great research and documentation.
      I’d also like to externally start/stop/pause the sequencer. Can the Beatstep receive those MMC commands? Or is there any other way?

  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…

  6. Hey guys, great topic – I’m hitting the wall with my beatstep and was wondering if going into programming it would help.

    I’m trying to use it to select banks via midi on a pitchfactor, nothing fancy, just sending program Change to the pedal and it works great for the 16 pads. Now I’d like to select beyond the 16 bank and I can’t figure it out how to switch up the bank selection on the beatstep. I believed the Midi channel switch would have helped but it doesn’t. Would that be possible with programming the thing using your technic? thanks a lot!

  7. Hi,
    that’s a nice article! I recently got a Beatstep and was very please to find out accidently that it seems to be controllable via Midi (see PS). I am trying to set it up as a controller for a live looper application with Sonic Pi. As I am more or less a newbie to Midi and especially to sending raw Midi messages I am struggling to apply your findings practically.

    With Sonic Pi (Ruby based) I am able to send raw Midi messages with:

    midi_raw 0xb0, 0x79, 0x0, port: „arturia_beatstep_midi_1“

    (Documentation: midi_raw a (byte), b (byte), c (byte) – Sends the raw MIDI message to all connected MIDI devices. Gives you direct access to the individual bytes of a MIDI message. … A raw MIDI message consists of 3 separate bytes – the Status Byte and two Data Bytes.)

    Now you wrote:

    This is the generic command string to set an individual parameter:
    F0 00 20 6B 7F 42 02 00 pp cc vv F7

    I tried to but did not yet succeed to:

    1. find out whether the „midi_raw“ command I have at hand is enough to access the Beatstep and if yes,
    2. how the command structure you documented translates to the 3 Midi bytes parameter that are available in the „midi_raw“ command.

    I’d very much appreciated a hint.

    Martin

    PS.: I already found out that at least the pads can be set via standard midi commands, which in Sonic Pi will be something like:
    midi_cc 56, 0, port: „arturia_beatstep_midi_1“, channel: 10
    (controller number, value, device, channel)
    PPS.: I did also enquire with Arturia about the LED color to be set and got the following very polite answer: „[…] This can maybe be achieved via Sysex.
    However, I’m can’t find this information somewhere on our database as it is an old product. […]“

    • Hey Martin,
      ich antworte mal der Einfachheit halber auf Deutsch, das fällt uns beiden leichter, oder?

      Den Tipp kann ich dir geben – aber ich bin nicht sicher, ob du das Pferd nicht am falschen Ende aufzäumst. Was du ja willst, ist den Beatstep als Controller für den Sonic Pi nutzen – und da ist ja erst einmal ziemlich egal, welche MIDI-Befehle der Beatstep sendet; es kommt darauf an, wie der Pi darauf reagiert (und das programmierst ja du). Nutze eins der Standard-Templates – da sendet jede Taste entweder eine MIDI-Note oder einen Program-Change-Befehl, und jeder Encoder einen CC. Das passt man gegebenenfalls einmal an – über die Arturia-Software für einen Mac oder PC – und lässt die Beatstep-Programmierung danach in Ruhe.

      Die Codes, die ich dokumentiert habe, sind ja dazu da, das zu tun, was sonst die Arturia-Software tut – den Controller zu programmieren. Im laufenden Betrieb brauchst du sie nicht – solltest du sie nicht brauchen.

      Aber der Vollständigkeit halber: Die Befehle zum Umprogrammieren der Tasten- und Encoder-Funktionen im Beatstep sind so genannte Sysex-Befehle. Wie du vielleicht weißt, besteht jeder MIDI-Befehl aus einer Kette aus Bytes; das erste sagt dabei immer, um welchen Typ Midi-Befehl es sich handelt: Eine Note startet mit 80h (für MIDI-Kanal 1), ein Note-Off mit 90h, ein Controller (MIDI CC) mit B0h (für Kanal 1) und so weiter. Das Kommando-Byte F0 leitet eine besondere Art MIDI-Nachricht ein – eine so genannte System-Exclusive- oder Sysex-Nachricht. Wie das Zielgerät diese Nachricht interpretiert, ist für jedes Gerät anders – es ist wie ein Cheat Code, ein Zauberwort, über die man die internen Parameter des Geräts so programmieren kann, wie es der HErsteller vorgesehen hat.

      Eine Sysex-Nachricht endet übrigens immer mit dem Byte F7h. Alles zwischen F0 und F7 ist wie gesagt hersteller- und gerätespezifisch und kann von einigen wenigen bis einigen hundert Bytes alles Mögliche umfassen.

      • Hallo undergeek,

        erstmal besten Dank für deine Antwort! Und ja: Deutsch ist einfacher;)
        Zur Erklärung: Sonic Pi ist ein Programm und läuft bei auf dem Laptop. Und klar, ich nutze einfache Midi-Kommandos um via Beatstep meinen Live Looper (in Sonic Pi) zu steuern. Sinnvollerweise brauche ich jedoch auch den Rückkanal, um Feedback an das Beatstep zu geben. Die Pad-Leds kann man ohne SysEx-Kommandos steuern (z. B. als Rückmeldungen, wann Sonic Pi auf welcher Spur aufnimmt = Pad 9 blinkt, siehe meine Anmerkungen oben). Es sieht aber im Moment für mich so aus, dass ich z. B. beim Programmstart Controller auf bestimmte Werte setzen muss. Das scheint nicht ohne SysEx zu gehen. Was ich noch nicht weiss – deshalb meine Anfrage – ob der Befehlssatz, den Sonic Pi zur Verfügung stellt, um beliebige Midi-Befehle zu verschicken, auch SysEx enthält. Wie gesagt, es gibt eine midi_raw-Kommando; das versendet aber nur 3 Bytes (siehe Beispiel oben). Ich grabe weiter …
        Eine Frage noch interessehalber: Womit arbeitest du auf dem iPad? Welches Programm verschickt da die Midi-Befehle an Beatstep?
        Mit bestem Gruß
        Martin

        • Ja, das mit dem MIDI-Raw scheint zu gehen, ist aber ein wenig an der Problemstellung vorbei – Du müsstest die Sysex-Kommandokette in Dreiergruppen aufteilen, dabei gibt‘s in der zugrunde liegenden Ruby-Bibliothek wohl auch einen midi_sysex-Call.

          So oder so: ich würde mir die Arbeit nicht machen, den Beatstep in Echtzeit umzukonfigurieren, sondern – falls nötig – zwei, drei Templates definieren und zwischen denen umschalten. Halt mal: das geht anscheinend nur per Sysex? Damn… (Muss noch mal checken, ob der Beatstep ProgramChange-Kommandos auch empfängt und interpretiert.)

          Um deine Frage zu beantworten: ich arbeite mit TB Midi Stuff, einer Controller-Oberfläche, die man zwar guten Gewissens als „eigenwillig“ bezeichnen darf und die seit geraumer Zeit nicht weiterentwickelt wird, aber ich hab‘ mich dran gewöhnt. Mein TB-Midi-Stuff-Template für den Beatstep funktioniert allerdings eher schlecht als recht – immerhin, es funktioniert.

  8. It is so great that you were able to map this out. How did you figure out the values? Did you sniiff the values coming out of Midi Control Center?

    I’m trying to write to the current encoder vals, using the codes reported by Michael, but for some reason I’m not able to make any of the commands change anything noticeable on the device. I’ve tried using amidi and also sendMidi on Linux to send bytes. Both are able to see the device, to connect, but so far as I can tell the sysex I am sending isn’t doing anything.

    I tried for example to change the global midi channel, or to make a pad light up. I have a feeling I must be overlooking something simple. I tried omitting the initial F0 byte in sendMidi (seeing as it is already indicated in the command that it is sysex) but that didn’t seem to help.

    Can anyone offer advice to get things up and running?

    • Hi,

      you might want to try the following examples which all work on Linux for me:

      $ amidi -p hw:2 -S ‚F0 00 20 6B 7F 42 02 00 10 77 01 F7‘ # red
      $ amidi -p hw:2 -S ‚F0 00 20 6B 7F 42 02 00 10 77 11 F7‘ # pink
      $ amidi -p hw:2 -S ‚F0 00 20 6B 7F 42 02 00 10 77 10 F7‘ # blue
      $ amidi -p hw:2 -S ‚F0 00 20 6B 7F 42 02 00 10 77 00 F7‘ # off

      amidi -p hw:2 -S ‚F0 00 20 6B 7F 42 01 00 01 20 F7‘ # ask for value of first controller

      Cheers
      Martin

  9. Glad to hear that! But the credit mostly goes to undergeek who got me going in the first place.

    Unfortunately I havn’t found out how to initialise the rotaries with some value. Arturia’s support (who to me was really nice and helpful) said, it can’t be done, nevertheless confirming that almost everything else is controlable by sysex (as undergeek has already documented). If you find something out let us know…

  10. Thanks for this great resource regarding the Beatstep. I have some small corrections:

    Encoders will only produce two distinct values (+/-1 from the center value) when set to a Relative mode. Turning a knob faster will simply create more messages emitting the same delta value.

    The Global MIDI channel message is:
    F0 00 20 6B 7F 42 02 00 40 06 nn F7 (MIDI channel-1, 0-15)

    The MIDI channel for all other parameters may be set to follow the global channel by using vv=0x41.

  11. Hello Sir,
    Thank you for this great work.
    I would like to have the Beatstep trigger actual SysEx messages, In other words, I would like to program a pad to send a sysex message to the connected midi devices. Is this possible?

    Thank you

    • No. To my knowledge, the Beatstep is not enabled to send Sysex sequences, and there is nothing in the firmware to program it to do so. Possibly the simplest thing would be to have some sort of midi processor send Sysex on a PC sent from the Beatstep.

  12. Great work!

    How did you intercept the MIDI messages? I own a Keystep and A Drumbrute Impact and would love to sniff the sysex commands. But the Windows version of MCC only talks to the controller via USB.

    Any clue how to do this stunt on WIndows 10?

    Cheers.

    • Thank you, Martin, and I‘d really love to help you – but I don‘t actually remember! All I know is that is was really no big deal, that I used the Mac, and it may have involved my iPad listening in via an USB hub.

      On a Win10 machine, I would probably try MIDI OX, which can listen in on any MIDI conversation even on the USB ports. If the MCC communicates via class-compatible MIDI, rather than via another custom USB protocol, you should be good.

      • Actually it is (now?) really simple. Just open the MIDI windows in the MCC app. It will show you all the MIDI notes and sysex messages that the app sends or receives.

        So it is no problem to figure out the sysex for simple changes like setting the MIDI channel. Defintely more work is to figure out how to program a complete sequence.

  13. This has been a great help with a library/sequencer I am making:
    https://github.com/konsumer/beatstep

    I am trying to modify how the sequencer works, with only midi. I have this idea to use CHAN like tracks, that are played at the same time, in software.

    I setup CHAN as a note-type and I am receiving noteon/noteoff messages correctly, and I want to get global MIDI channel from device on CHAN noteoff, so I can see what channel was just set on the controller with CHAN + pad. I have a function that takes pp & cc as params and waits for return sysex message, that seems to work for other settings. when I run get(0x50, 0x0B) for global MIDI channel (which should have been switched with channel operation) it always returns 0x15, instead of the channel that was just selected. Am I doing this right?

    get:
    send message: F0 00 20 6B 7F 42 01 00 50 0B F7
    get message: F0 00 20 6B 7F 42 02 00 50 0B 15 F7

  14. Amazing thread to find

    Anyone stumbling here from google tried doing anything with the Keystep Pro?

    It’s probably not possible, but it would be amazing to get greater 2 way communication between this and my mac…

    eg. mimic some of the step sequencer/DAW integration available on some controllers like the Push or Launchpad Pro mk3….

  15. Hey,
    first of all thanks for this awsome collection of information on the BeatStep controller! I’ve been able to use your insights to setup a proper Midi Remote Script for Ableton Live and I am quite happy with the outcome…

    However, there are 3 issues that I have been unable to find a solution… so any help would be much appreciated!:

    1) it seems that the STOP-button triggers the following unwanted light-changes:
    – magenta turns into black
    – blue turns into red
    – red stays red
    2) similar as the first issue, the SHIFT-button turns all button-lights off (e.g. black) once it is released

    any ideas on how to avoid this behaiour? (aside of sending a turn-light-on message again which will cause the buttons to flush annoyingly whenever stop or shift is pressed)

    … and last but not least, do you know of any way to disable the LED feedback (e.g. the moving blue light) that is activated once the play-button is pressed?

    Thanks!

  16. hello,

    thanks kindly for this, it’s a very useful page!

    one thought: could the „silent“ mode perhaps be better described as a „CC PRESSURE“ mode?

    ie. the three CC behaviors for pads being:

    1. SWITCH-TOGGLE (0x01=0x08 + 0x06=0x00)
    2. SWITCH-GATE (0x01=0x08 + 0x06=0x01)
    3. PRESSURE(-GATE) (0x01=0x01)

    the first two send the MINIMA value for off and the MAXIMA value for ON (respectively at consecutive presses, and at press/release)

    the third sends continuous pressure data in the range (MINIMA,MAXIMA)

    best,
    rd

  17. Can someone hack the beatstep to make it a simple standalone drum sequencer, even if it was only 3 or 4 note poly would be ok. I would happily give up the random, ping pong and reverse functions and scales if it could be transformed into a drum sequencer with mute and solo functions.

  18. Hello, let me thank you first for your greate work … ;-)

    I try to use the Arturia Beatstep controller with Bome MIDI Translator Pro to control DaVinci Resolve. My plan is to use the LED inside the pads to show in which page within DaVinci resolve ist currently selected. So I use your configuration examples (slidly modified related to the Note value) and it seams to work … but only the LED seams to work. After sending the following sequenz that make’s the LED working the pad delivers note 0 instead of 20 (0x14):
    F0 00 20 6B 7F 42 02 00 01 70 09 F7 <– set mode to MIDI Note
    F0 00 20 6B 7F 42 02 00 03 70 14 F7 <– set MIDI-Note to G#0 (20)

    Has anyone some idears, where my mistake is?
    Thanks and Bestregards

  19. Thanks for your great work, untergeek! This page is an absolute classic by now :-) World heritage and must be preserved ;-D

    However, for future visitors struggling with controlling the sequencer, here are two examples which could help:

    1) To set step 3 to C1: F0 00 20 6B 7F 42 02 00 52 02 24 F7
    52 = set midi note
    02 = step 2
    23 = C1
    (the page section has two typos and mentions midi channels, where it rightly should be midi notes)

    2) To turn step 2 off: F0 00 20 6B 7F 42 02 00 53 01 00 F7
    53 = toggle state
    01 = step 2
    00 = off (replace with 7F for on)
    (the page section was a bit unclear for me)

  20. Thanks very much for all this info, its been very useful!

    I’ve found a mistake though – the ‚Gate length‘ parameter (0x08) actually ranges from 0x32 to 0x63, not from 0x00 to 0x63 like stated. Hope this helps someone else who was as confused as I was why the change wasn’t sticking!!

Schreibe einen Kommentar

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