/openrb-instruments

a DIY arduino based rockband midi pro adapter for xbox one / series

Primary LanguageCMIT LicenseMIT

OPENRB-INSTRUMENTS Discord Badge

an arduino leonardo based midi pro adapter, emulating a PDP legacy adapter and presenting itself as pro drums, very close in functionality to the Roll Limitless but open source.

Table of Contents

Parts

Necessary Parts

  • Arduino Leonardo or any clone & micro-usb -> usb a cable

  • USB Host Shield 1

  • XBOX One Controller & coresponding USB-x -> USB-A Cable (newer series ones use USB-C, XBONE controllers use micro) 2

Optional Parts

  • If using Serial MIDI (recommended): any arduino midi shield
  • If using USB MIDI: Powered USB A Hub, your setup may work without it being powered depending on how much your midi device draws

Optional (Debugging) Tools

  • TTL Serial Adapter - in Config/AdapterConfig.h define SERIAL_DEBUG as the Arduino HardwareSerial device you'd like your debug output on, then recompile and there will be a debug stream at 115200 baud (recommeneded if you plan to contribute to development)

Assembly

Physical Assembly

Choose your flavor of MIDI (see Notes on Serial VS USB MIDI ), they're all supported by one firmare so its just a matter of plugging everything in to support your desired method.

Serial MIDI (RECOMMENDED)

Here's the whole system:

alt text

Boards:

alt text

Final Product:

alt text

Note: Make sure the switch on the Serial Midi shield is set to "ON", unlike my previous adapter this does not need to be turned "OFF" for programming.

USB MIDI

Assemble exactly like the serial MIDI variant, but you don't need the MIDI shield.

  • Plug both XBOX controller and Drum Brain into the USB Host Shield via USB Hub (recommended) OR
  • once the controller is finished authenticating the adapter (orange LED turns on), unplug it and plug your usb midi kit in

Notes on Serial VS USB MIDI

USB can be a nightmare and is not recommended for use here. USB devices can be finicky and not very fault tolerant. There are a few bugs related to hotplug currently that may never be fixed, so while I haven't personally run into any problems while playing I can say with pretty high confidence that the Serial MIDI is going to be more reliable than USB Midi.

Also, due to the nature of this design you'll be constantly fighting ground loops, so if you plan to listen to anything from your drum brain, do yourself a favor and get a USB isolator.

Finally, the Serial MIDI shield is pretty much as cheap or cheaper than a USB Hub, making it the overall better option.

The thing that USB MIDI has going for it is the goal of having eventual support for legacy instruments over USB. This will have to be how they're connected so if you plan to use them with this adapter once support is added, and are trying to save as much money as possible, go ahead with the USB Midi option.

Flashing the Arduino

AVR-programmer

If you want the most straightforward experience, go ahead and download the prebuilt executable for avr-programmer. This is a quick UI I built in Python to directly facilitate flashing for this project, for windows it bundles its own copy of avrdude to handle the flashing, but it is cross platform with the caveat that you need to have avrdude installed and in your path for it to work.

Steps:

  1. Download the latest release of avr-programmer

  2. Download the latest release of openrb

  3. Leave your arduino unplugged

  4. Run avr-programmer.exe

  5. Select "Type" -> atmega32u4 (this is currently the only type)

  6. Leave "Port" empty (this will auto-detect when you plug your arduino in)

  7. Select the firmware file you downloaded earlier

  8. Plug your Arduino in and wait at least 10s.

  9. Only after the Arduino is plugged in, enable "Auto Flash". Here's an example for final settings:

    alt text

  10. Press the reset button on the Arduino, host shield, or midi shield (they're all connected to the same pins so they will all do the same thing). avr-programmer will autodetect that the Arduino is in programming mode and start to program it, indicated by launching a popup window. If you are having trouble programming feel free to open an issue on GitHub or join the Discord server and ask there. A successful program will appear as follows:

    alt text

  11. Close avr-programmer and unplug your Arduino, you're ready to go! Any firmware updates in the future will be done with this method

Manually Flashing With avrdude

If you're comfortable using a command line, familiar with avrdude, and don't want to run some random executable on the internet you can just interface with avrdude yourself to flash. The commands are:

avrdude -patmega32u4 -cavr109 -P<device> -b115200 -D-Uflash:w:<path-to-firmware>:i

Building The Code

The project uses the LUFA build system which utilizes GNU Make and requires a unix-style shell (bash or zsh are officially supported). Install avr-gcc and avr-libc, then, make to build locally.

Usage

When powered, the XBOX controller guide button will light up, then the built-in orange LED on the Leonardo will light up once the authentication is finished. This indicates everything is ready to go. You can then use the controller to navigate menus or turn on drum navigation and unplug the controller altogether.

Any time it is reconnected / powered, the XBOX controller will need to be plugged in so that it can handle authentication.

This should be a mostly plug and play solution, but there is more polishing that needs to be done - I'm not sure it syncs up perfectly with the timing of the other XBOX wireless instruments and additional support for USB MIDI and XB360 instruments is coming in the future.

Support Me

This project is entirely free and open source, donations are appreciated but not expected.

Buy Me A Coffee

Footnotes

  1. Host Shields are very finicky - the most popular design that floats around is incorrect, so be sure that the PCB is white AND product picture includes the "RoHS" stamp or has "Arduino Meets Android", printed above the "USB Host Shield" text

  2. I've only tested this with an older Series S controller, if your controller is plugged in, but the XBOX light doesn't come on, open an issue with the vendor ID and product ID so I can add support