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
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.
| Control | Type | Message | Ch | Number | Signal | LED feedback | Verified |
|---|---|---|---|---|---|---|---|
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
- manufacturer BeatStep User's Manual v1.0.1 (Arturia)ch. 8 default settings (CNTRL presets): encoders 1–16 CC 7 74 71 76 77 93 73 75 114 18 19 16 17 91 79 72, Absolute, Global channel; pads 1–8 notes 44–51, pads 9–16 notes 36–43, Gate; STOP / PLAY send MMC Stop (01) / Play (02) to device 127. §3.1: Global MIDI channel defaults to 1. §2.2: 16 endless encoders + the Level/Rate encoder (master level in CNTRL mode), 16 velocity- and pressure-sensitive pads; pads numbered 1–8 on the top row, 9–16 below (front-panel diagram)
- community Ableton Live 12 MIDI Remote Script BeatStep (decompiled; non-official)same encoder CCs except encoder 1 (it re-programs the unit by SysEx and puts encoder 1 on CC 10); pad rows 44–51 (top) and 36–43 (bottom)
- community DrivenByMoss BeatstepControllerDefinition.java (Bitwig; non-official)port name "Arturia BeatStep"
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
Embed it with one line
No import map, no build step. Change
layout, addhardware="ask"for a Connect button.<script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script> <oav-controller profile="arturia-beatstep" readout></oav-controller>Or as an iframe
For places that only take an iframe. Every event arrives as a
postMessage.<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>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.
<!-- 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.
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=arturia-beatstep' }));| In your sketch | Control | Message |
|---|---|---|
pad1 | 1 pad1 | Note 44 · G#2 · Ch 1 |
pad2 | 2 pad2 | Note 45 · A2 · Ch 1 |
pad3 | 3 pad3 | Note 46 · A#2 · Ch 1 |
pad4 | 4 pad4 | Note 47 · B2 · Ch 1 |
pad5 | 5 pad5 | Note 48 · C3 · Ch 1 |
pad6 | 6 pad6 | Note 49 · C#3 · Ch 1 |
pad7 | 7 pad7 | Note 50 · D3 · Ch 1 |
pad8 | 8 pad8 | Note 51 · D#3 · Ch 1 |
pad9 | 9 pad9 | Note 36 · C2 · Ch 1 |
pad10 | 10 pad10 | Note 37 · C#2 · Ch 1 |
pad11 | 11 pad11 | Note 38 · D2 · Ch 1 |
pad12 | 12 pad12 | Note 39 · D#2 · Ch 1 |
pad13 | 13 pad13 | Note 40 · E2 · Ch 1 |
pad14 | 14 pad14 | Note 41 · F2 · Ch 1 |
pad15 | 15 pad15 | Note 42 · F#2 · Ch 1 |
pad16 | 16 pad16 | Note 43 · G2 · Ch 1 |
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).
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.