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)
- 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 (BMC now supports some ESP32 boards!). It comes with a companion editor app that lets users design their 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 (Mini Displays currently not supported)
- ✨ NEW! SparkFun ESP32 BETA MicroMod (Mini Displays currently not supported)
BMC has BETA support for ESP32 boards! Currently, only the ESP32 DEVKIT V1 (one of the most common boards) and the SparkFun ESP32 MicroMod are supported, with more boards to come as testing continues.
A few things to keep in mind:
- ESP32 support is in BETA, please report any issues.
- Since the ESP32 doesn't have Native USB MIDI, it relies solely on Bluetooth Low Energy (BLE) MIDI for connectivity.
- BLE MIDI is always available taking the place of the USB MIDI port.
- Only 2 Serial Ports are available on pins 4/5 and 17/16
- Mini Displays are not supported yet, as they rely on a Teensy-specific library.
- The Serial Monitor is unavailable on the web editor app.
- When using the internal EEPROM, the size will always be 4,096 bytes.
- To use with ESP32, the NimBLE-Arduino library version 1.4.3 is required.
- The BMC for ESP32 boards package is a modified version of the official ESP32 package. Both can coexist, but if you select a board from the BMC package, you MUST have a
config.h
file in the sketch folder.
✅ 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.