open-audiovisual
Search GitHub

Arturia

Arturia BeatStep

Arturia BeatStep is a MIDI hardware controller by Arturia: 16 pads and 16 encoders.

It sends CC and Note on channel 1. The profile cites 3 sources. No control is flagged unverified.

  • Manufacturer docs
  • Community notes
Kind
hardware device
Maker
Arturia
Controls
32 controls
Messages
CC · Note
MIDI channels
1
LED feedback
none sent
Signals
midi/beatstep/…
Port name matches
/beatstep(?!\s*pro)/i
LEVEL · RATE■▶CNTRL/SEQEXT SYNCRECALLSTORESHIFTCHAN12345678910111213141516

Play Arturia BeatStep on screen Full screen ↗ Raw JSON ↗ All controllers

Drag knobs and faders · tap pads and keys · or plug the real one in and press Connect. Nothing is sent anywhere unless you add a MIDI out.

MIDI implementation

Every control of Arturia BeatStep and the message it sends

Generated from the profile file, so it is the same table the on-screen controller plays. Channels are 1–16; numbers are real MIDI numbers.

MIDI implementation of Arturia BeatStep
ControlTypeMessageChNumberSignalLED feedbackVerified
1 e1 encoder CC · absolute 1 7 midi/beatstep/e1 — yes
2 e2 encoder CC · absolute 1 74 midi/beatstep/e2 — yes
3 e3 encoder CC · absolute 1 71 midi/beatstep/e3 — yes
4 e4 encoder CC · absolute 1 76 midi/beatstep/e4 — yes
5 e5 encoder CC · absolute 1 77 midi/beatstep/e5 — yes
6 e6 encoder CC · absolute 1 93 midi/beatstep/e6 — yes
7 e7 encoder CC · absolute 1 73 midi/beatstep/e7 — yes
8 e8 encoder CC · absolute 1 75 midi/beatstep/e8 — yes
9 e9 encoder CC · absolute 1 114 midi/beatstep/e9 — yes
10 e10 encoder CC · absolute 1 18 midi/beatstep/e10 — yes
11 e11 encoder CC · absolute 1 19 midi/beatstep/e11 — yes
12 e12 encoder CC · absolute 1 16 midi/beatstep/e12 — yes
13 e13 encoder CC · absolute 1 17 midi/beatstep/e13 — yes
14 e14 encoder CC · absolute 1 91 midi/beatstep/e14 — yes
15 e15 encoder CC · absolute 1 79 midi/beatstep/e15 — yes
16 e16 encoder CC · absolute 1 72 midi/beatstep/e16 — yes
1 pad1 pad Note · velocity 1 44 · G#2 midi/beatstep/pad1 — yes
2 pad2 pad Note · velocity 1 45 · A2 midi/beatstep/pad2 — yes
3 pad3 pad Note · velocity 1 46 · A#2 midi/beatstep/pad3 — yes
4 pad4 pad Note · velocity 1 47 · B2 midi/beatstep/pad4 — yes
5 pad5 pad Note · velocity 1 48 · C3 midi/beatstep/pad5 — yes
6 pad6 pad Note · velocity 1 49 · C#3 midi/beatstep/pad6 — yes
7 pad7 pad Note · velocity 1 50 · D3 midi/beatstep/pad7 — yes
8 pad8 pad Note · velocity 1 51 · D#3 midi/beatstep/pad8 — yes
9 pad9 pad Note · velocity 1 36 · C2 midi/beatstep/pad9 — yes
10 pad10 pad Note · velocity 1 37 · C#2 midi/beatstep/pad10 — yes
11 pad11 pad Note · velocity 1 38 · D2 midi/beatstep/pad11 — yes
12 pad12 pad Note · velocity 1 39 · D#2 midi/beatstep/pad12 — yes
13 pad13 pad Note · velocity 1 40 · E2 midi/beatstep/pad13 — yes
14 pad14 pad Note · velocity 1 41 · F2 midi/beatstep/pad14 — yes
15 pad15 pad Note · velocity 1 42 · F#2 midi/beatstep/pad15 — yes
16 pad16 pad Note · velocity 1 43 · G2 midi/beatstep/pad16 — yes

LED feedback is not modeled for this one yet, so OAV does not light its LEDs. Every control still plays and sends its message.

Sources

Notes

CNTRL mode (red pads) with the factory preset, Global channel 1. The big Level/Rate encoder is not modelled: the manual's default table does not list it (it "controls the master level by default"); if it also sends CC 7 it will move encoder 1 on screen. STOP / PLAY send MMC SysEx and are not modelled (SysEx stays off). SEQ mode plays the step sequencer on the sequencer channel instead — not modelled. The encoders are endless but send absolute values in the default preset. Pad pressure: poly aftertouch is followed automatically if the unit sends it. The original BeatStep only — the BeatStep Pro is a different device and is not matched.

Port names it recognises

matches
/beatstep(?!\s*pro)/i
avoids
/pro/i

Signals

Every control publishes midi/beatstep/<control> (0..1), plus /raw; pads add /hit, encoders /delta, keys /on /off and n<note>; the last control touched is midi/beatstep/last.

Use it

Use Arturia BeatStep in your own work

  1. Embed it with one line

    No import map, no build step. Change layout, add hardware="ask" for a Connect button.

    html
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="arturia-beatstep" readout></oav-controller>
  2. Or as an iframe

    For places that only take an iframe. Every event arrives as a postMessage.

    html
    <iframe src="https://openaudiovisual.com/embed/controller/?profile=arturia-beatstep&readout"
            width="720" height="306" style="border:0;max-width:100%" allow="midi"
            title="Arturia BeatStep"></iframe>
    <script>
      // every control the visitor plays arrives here
      addEventListener('message', (e) => {
        if (e.data?.source !== 'openav' || e.data.type !== 'control') return;
        console.log(e.data.detail.signal, e.data.detail.value);
      });
    </script>
  3. Send it to Ableton, TouchDesigner or Resolume

    What you play on screen leaves as real MIDI on the IAC bus (macOS) or a loopMIDI port (Windows). The steps are on the catalog page.

    html
    <!-- what you play on this controller → the IAC bus (macOS) → Ableton, TouchDesigner, Resolume -->
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="arturia-beatstep" midi-out="IAC" readout></oav-controller>
    <!-- Windows: midi-out="loopMIDI" · let the visitor pick a port: midi-out="ask" -->

    macOS: Audio MIDI Setup → MIDI Studio → IAC Driver → “Device is online”. Windows 11: the built-in Windows MIDI Services have a loopback (not tested by us); older Windows: install loopMIDI, add a port and use midi-out="loopMIDI".

In p5.js, with one line

The one-line injection names knobs, faders and pads by their order in this profile, the order of the table above. Add ?profile=arturia-beatstep to make the on-screen controller this one; a real Arturia BeatStep is recognised by its port name.

javascript
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=arturia-beatstep' }));
In your sketchControlMessage
pad11 pad1Note 44 · G#2 · Ch 1
pad22 pad2Note 45 · A2 · Ch 1
pad33 pad3Note 46 · A#2 · Ch 1
pad44 pad4Note 47 · B2 · Ch 1
pad55 pad5Note 48 · C3 · Ch 1
pad66 pad6Note 49 · C#3 · Ch 1
pad77 pad7Note 50 · D3 · Ch 1
pad88 pad8Note 51 · D#3 · Ch 1
pad99 pad9Note 36 · C2 · Ch 1
pad1010 pad10Note 37 · C#2 · Ch 1
pad1111 pad11Note 38 · D2 · Ch 1
pad1212 pad12Note 39 · D#2 · Ch 1
pad1313 pad13Note 40 · E2 · Ch 1
pad1414 pad14Note 41 · F2 · Ch 1
pad1515 pad15Note 42 · F#2 · Ch 1
pad1616 pad16Note 43 · G2 · Ch 1
p5.js sketch
function draw() {
  background(20);
}

function padPressed(n, velocity) {      // n = 1…16, as in the table
  circle(random(width), random(height), velocity * 100);
}

Encoders, buttons, wheels and strips are not numbered: read them as midi.cc[number] in the table above, or react in controlChange(cc, value, ch).

The whole p5.js page →

Missing

Is your controller not here?

Open an issue with the brand and model, whether you have the unit and a link to the manual. Or write the profile yourself: it is one JSON file.

GitHub

Is something in this data wrong?

Every number on this page comes from one JSON file. If it disagrees with your unit or the manual, tell us which firmware you checked and we fix the file.