Git Product home page Git Product logo

beatstep's Introduction

WIP

I haven't really worked out the sequencer fully. I think I know how I want it to work, but haven't written the code to make it work that way. I think the lib is still useful as it is, to make things (I have all the known sysex commands worked out, etc) but it will need some more work to be a functional sequencer.

BeatStep Interceptor

new beatstep sequencer

This is a command-line program to make the Arturia BeatStep work in different ways than the firmware is meant to.

The Arturia BeatStep is a really nice-feeling device, that is pretty cheap (~$100 new.) The built-in firmware for the device is OK, but a bit wonky for sequencing complex drum-patterns. Since I don't have access to the firmware's source, I made this so I'd have a sequencer that works how I want. You can also use it as a command-line program to load/save beatstep preset files (even on linux, which the official software doesn't support.)

It starts a virtual midi device that can be plugged into other software.

IMPORTANT Using the sequencer will set your device up with specifc mappings and stuff, so make sure to back up your beatstep settings in the MIDI Control Center (from Arturia) program, or use STORE/RECALL buttons on device, or use save/load in CLI, if you care about them.

installation

npm i -g beatstep

You can also run it without installing:

npx beatstep list

usage

command-line

beatstep <command>

Commands:
  beatstep load <file>  Load a .beatstep preset file
  beatstep save <file>  Save a .beatstep preset file
  beatstep list         List MIDI devices
  beatstep seq          Start sequencer

Options:
  --help     Show help                                                 [boolean]
  --version  Show version number                                       [boolean]

Commands have more options. If you want to know more about it, run beatstep <command> --help

interaction

I am still working on this part. Here is how it currently works:

  • run beatstep seq to start the sequencer
  • Make sure controller is in CNTRL mode (red) and turn on EXT SYNC (blue)
  • Press SHIFT to chose pattern
  • Press STOP to choose track
  • PLAY will play/stop the current pattern
  • LEVEL/RATE sets the speed of the sequencer.

The notes it sends out are based on hydrogen drumkits, which is a common mapping for drumkit-instruments starting at C1 with a kick drum. Eventually, I can make this a configurable option (like a CLI flag that you can tell it the notes it can use for each track.)

as a library

You can also use this as a nice BeatStep interface, in your own code

The class constructor has 2 params, which are the names of input and output device (you can get with require('easymidi').getInputs() and require('easymidi').getOutputs().)

import { getOutputs, getInputs } from 'easymidi'
import { BeatStep } from 'beatstep`

const beatstep = new BeatStep(
  getInputs().find(d => d.includes('Arturia BeatStep')),
  getOutputs().find(d => d.includes('Arturia BeatStep'))
)

beatstep.on('noteon', console.log)
beatstep.on('noteoff', console.log)

hardware

Eventually, I'd like to reprogram the chip on the controller to acheive a fully custom standalone sequencer.

It uses a stm32f103 chip, with some supporting circuitry to multiplex all the buttons, leds, and knobs. It looks like they are using hc574 to multiplex rotoary-encoders, somehow. It looks like it has programming pins on board (JP1) but firmware updates over sysex would be preferrable. This might give me some ideas for reversing the firmware to the point that I can read inputs, output LEDs, and eventually just write my own interface.

Ideally, I could compile my own code, create my own led file (appears to be hex) and send over sysex.

TODO

  • Fill in the docs: api & usage
  • Figure out RATE knob for BPM (currently works, but outputs the wrong BPM on console)
  • Figure out CHAN so I can use that to switch tracks and use SHIFT to do something else (commands like copy/paste and sequencer controls would be cool)
  • Use STORE/RECALL for something other than intended. Would be good to fire save/load (maybe combined with SHIFT and STOP for track/pattern/song)
  • Figure out easier-to-compile MIDI lib (for cross-platform release building)
  • Different seqquencer styles: current (all drums in one instrument on one channel), seperate drum instruments, seperate channels, something for melodies
  • A mode that is like ableton (record inputs on all pads/knobs and allow playback)
  • Better debugging: more stuff and print all midi messages sent/received

thanks

I couldn't have made this without the awesome hacking in this blog post.

beatstep's People

Contributors

konsumer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

beatstep's Issues

Presets

I never got getPresets working, and setPresets needs some testing. This would help linux people a lot, since there is no way for them to work with presets.

In addition to getPresets working at all, I need to test both to make sure they basically work, as this is an area I did not do enough experimentation with.

Hard to use

Currently, this project is not really usable, as it's not even published on npm, and the native lib makes it tricky to use without a complete build-chain and alsa deps (at least on linux.)

I think this has 2 parts:

  • - get it in a published state, on npm so basic directions work, and add directions for C deps for common operating systems
  • - pre-build CLI in releases for common platforms, so people can use it without node/npm

Rewrite with rtmidi

Rewriting the core of this with rtmidi, in C/rust/nelua/nim/etc, would make a much smaller CLI program, and that could then be used in NAPI, if I need node-support. This would resolve build-issues (like #6 ) and make building easier (which I think would help with pkg issues.)

The improved sequencer could also be ported to C/etc with a "Virtual Port" and realtime messages.

windows support

Getting lots of requests for windows support in comments on the video.

Node program should work fine on windows, but needs testing, and it might be helpful to setup CI to build it as a standalone package for them.

This is a bit complicated because MIDI uses native modules, and those generally have issues being pre-compiled for windows on other platforms, but maybe I can build it in CI.

Controls Leds

Hi there,

i'd like to know if you are able to switch on/off led of controls buttons. I'm trying to use some of the controls as toggles to map new functions to the pads. It would be great if I could use led on/off to indicate this state.
The selected controls are configured as note/toggles but led commands do not work. Do you know if this is even possible?

Thanks

Firmware

I don't think I ever worked out firmware (.led files) upload, which I think would be useful (especially for linux people, since there is no Midi Control Center.)

Additionally, it would be cool to reverse the format and upload custom firmware to the Beatstep, so it can do completely different things. This may be challenging, since I think it is compiled for whatever microcontroller it's using, and I'll need to work that out first.

Related: #10

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.