An Arduino based MIDI0 PC1 controller stylized as ARMIDUINO.
The ARMIDUINO is a combination software and hardware project. Technically no sofware skills are required, but a rudimentary comprehension of Arduino programming is recommended. If everything works first try, then there is no need to touch the software; however, there may be differences in our hardware that require alterations to the code. A beginner-level understanding of circuitry is required because this project is self-assembled.
This project aims to provide a solution (or starting point) for any MIDI hobbyists that would like to build their own simple MIDI PC controller that can specify the MSB2 bank value, the LSB3 bank value, the PC number, as well as the MIDI channel.
This project was inspired by the fact that I was not able to find a simple standalone MIDI PC controller that was both relatively affordable and clear on how to send PC messages to a system that involved banks reliant on both a MSB and LSB value. There are plenty of commercially available MIDI controllers and pedals out there that can do what this device can do and so much more, but they didn't seem very intuitive to someone like me who was relatively inexperienced with MIDI (before I started this project) and were simply overkill for what I needed to do. Hopefully this project helps others who are in the same boat.
I have provided two separate software implementations that rely on the exact same hardware: one generic and one device-specific (although this one can be tailored for your own use-cases); more on these further below.
Here is an aside to explain how Banks and MIDI PC messages work on a more abstract level before I get into the implementation details of the software itself. MIDI is a software protocol that is useful for controlling musical instruments whether thats through a DAW4 or a Synthesizer. Its most common use-case is for sending musical note data across devices, but it can also send other messages for controlling specific parameters. The types of messages required for this project are MIDI CC5 messages and MIDI PC messages. Specifically one MIDI CC message is required to set the MSB bank value, another MIDI CC message is required to set the LSB bank value, and one MIDI PC message is required to specify the PC number. Here is a table to visualize what you need in order to successfully specify a program on a system that requires a MSB value, LSB value, as well as a PC number:
Name | MIDI message type | Control Number | Value | MIDI Channel | Comments |
---|---|---|---|---|---|
MSB Value | CC | 0x00 | 0-127 | 1-16 | These control numbers are standard, refer to the MIDI spec for more info |
LSB Value | CC | 0x20 | 0-127 | 1-16 | 0x20 is hexadecimal for 32 |
PC Number | PC | N/A | 1-128 | 1-16 | PC is seperate from CC and therefore has no control number |
The order in which these are sent do not matter
The generic implementation is meant to work with any MIDI capable device that uses PC messages. It can serve as a complete piece of software for anyone to use or simply as a template for others to work off of in order to develop a more specific version for their usecase.
\ Encoders are indexed 0 to 3 going left to right
The control scheme for this implementation is as follows:
The device-specific implementation is a streamlined approach to sending PC messages for the YAMAHA DD75 e-drum kit. This device is an e-drum kit on the surface that also includes a hidden YAMAHA sample instrument library. This library can only be accessed by an external MIDI controller, hence the development of this project. Based on the MIDI reference guide linked below, I've mapped each instrument and their corresponding MIDI PC value to a library which I can scroll through easily using the ARMIDUINO. This removes the need to memorize which instruments correspond to which PC values.
Yamaha DD-75 MIDI Reference guide
\ Encoders are indexed 0 to 3 going left to right
The control scheme for this implementation is as follows:
Please follow this guide.
0Musical Instrument Digital Interface \ 1Program Change \ 2Most Significant Bit \ 3Least Significant Bit \ 4Digital Audio Workstation \ 5Control Change \ 6Probably confusing for some, myself included, but the MIDI Reference that Yamaha provides for the DD75 refers to each program/instrument as a "Voice"; therefore, I do as well. Usage here should not be confused for note polyphony as is the use case of the term "Voice" when applied (most often) to synthesizers.
Change:
Fix:
Official Release of Software and Guide
If you have any questions feel free to submit an issue.