Official BMC Website @ BadassMIDI.com
For Teensy 3.x, 4.x & Teensy Micromod (BMC now supports some ESP32 boards!)
β BMC 2.0 is NOT compatible with previous versions of BMC!, you will need to create a new config file and backups for older versions are not compatible.
BMC 2.0 is a major re-write of the BMC core. If you're upgrading from an older version, you'll need to create a new config file. Learn more about the changes here.
π Before proceeding, please review the Installation requirements!
β Download the BMC library directly from the Arduino Library Manager.
πΉ Follow BMC on Facebook
πΉ Follow BMC on Instagram
πΉ Watch BMC Videos on YouTube
πΉ Access the Web Editor (Google Chrome required)
- Changelog
- What is BMC
- Supported Boards
- ESP32 Support
- Key Features
- Documentation
- BMC Editor App
- Installation
- Library Structure & Coding Style
- About BMC
- Contribute to BMC
- License
BMC (Badass MIDI Controller) is a powerful MIDI controller library designed for Teensy boards (now supporting ESP32!). It comes with a companion editor app that lets you design your MIDI controllerβs hardware and UI without writing code.
- Design Your MIDI Controller π οΈ
- Specify buttons, LEDs, potentiometers, encoders, displays, MIDI ports, and more.
- Configure the UI layout to match your physical hardware setup.
- Customize the UI elements (e.g., different button styles and colors).
- Compile & Upload π
- BMC generates a config.h file that defines your controller setup.
- The library compiles with this config file to enable only the required features.
- Edit & Manage ποΈ
- Use the editor app to modify settings and data in EEPROMβno need to re-upload code!
β
No coding required! BMC handles everything behind the scenes.
π‘ Advanced users can extend functionality using the BMC API.
- Teensy Micromod
- Teensy 4.1
- Teensy 4.0
- Teensy 3.6 (β Not recommended for new designs)
- Teensy 3.5 (β Not recommended for new designs)
- Teensy 3.2 (β Not recommended for new designs)
- β¨ NEW! ESP32 Devkit V1 (Beta)
- β¨ NEW! SparkFun ESP32 (Beta)
- β¨ NEW! ESP32-S2 Devkit(Beta)
- β¨ NEW! ESP32-S3 Devkit (Beta)
BMC now supports multiple ESP32 models, including models with OTG USB all are currently in Beta.
- ESP32 (Original)
- β No native USB MIDI
- β BLE MIDI only (enabled automatically)
- ESP32-S2 / ESP32-S3
- β Native USB MIDI support (enabled automatically)
- β BLE MIDI also enabled automatically
- On ESP32 (original), BLE MIDI replaces USB MIDI.
- On ESP32-S2/S3, USB MIDI works as expected, and BLE MIDI is also available.
- BLE MIDI is always enabled, regardless of variant.
- Only 2 serial ports are available on all ESP32 boards.
- The Serial Monitor is not available in the Arduino Web Editor or iPad app.
- Internal EEPROM size is fixed at 4,096 bytes.
- The BMC for ESP32 Boards package is a modified version of the official ESP32 package:
- When selecting an ESP32-S2 or ESP32-S3 board from the BMC for ESP32 Boards package, all necessary USB MIDI settings are automatically configured.
- All BMC features are currently Supported on ESP32.
β MIDI Communication
- USB & USB Host MIDI support for controlling DAWs and MIDI apps (Teensy Only).
- Up to 4 Serial MIDI Ports (1 on ESP32) for legacy devices.
- Bluetooth Low Energy (BLE) MIDI with added MIDIBLE module (always available on ESP32) β Automatic Hardware Management
- Reads buttons, encoders, pots, LEDs, and displays without extra coding. β EEPROM Handling
- Supports built-in EEPROM, external I2C EEPROM (24LC256), or built-in SD Card Reader. β MIDI Sync
- Syncs with Fractal Axe FX II, AX8, Logic Pro, and more!
For complete documentation, visit:
π BMC Documentation
π Get the BMC Editor App for iPad! π
Purchasing the app supports BMC development! β€οΈ
Creating a layout that matches your hardware is easy!
Help improve BMC by purchasing MIDI modules & accessories at BadassMIDI.com!
π Follow the installation guide here:
Installing Teensyduino & BMC on Arduino 2.0
β
Macros: Prefixed with BMC_
, uppercase with underscores.
#define BMC_MIDI_CONTROL_CHANGE 0xB0
β
Class Naming: Prefixed with BMC
, using camelCase.
BMCMidi, BMCTimer, BMCFlags, BMCMidiMessage
β
Struct Naming: Prefixed with bmcStore
.
bmcStore, bmcStoreGlobalCustomSysEx
β Default API Initialization:
// Creates an instance of BMCApi named bmc
BMC_DEFAULT();
// Equivalent to:
BMCApi bmc = BMCApi();
β The only code your Sketch needs!:
#include <BMC.h>
BMC_DEFAULT();
void setup(){
bmc.begin();
}
void loop(){
bmc.update();
}
BMC started in 2017 as a custom MIDI controller project for a Fractal AX8 guitar processor. After struggling with Arduino libraries, the need for an easy-to-use editor app became clear.
π‘ Why Teensy?
Teensy boards were the perfect solution due to their built-in USB MIDI support and superior performance compared to standard Arduinos.
Since then, BMC has evolved into a powerful no-code MIDI controller framework that saves time and effort, letting users focus on music instead of programming!
Are you a C++ programmer? Want to improve BMC? Contact me here: RoxXxtar Contact Page
π‘ HUI Control: If you have experience with HUI MIDI Control, letβs collaborate! Email me at RoxXxtar Contact Page.
π More Info & Web Editor: RoxXxtar.com/BMC
MIT License
See the LICENSE
file for details.