Wang-Derr / ARMIDUINO

An Arduino based MIDI PC controller
2 stars 0 forks source link

ARMIDUINO

An Arduino based MIDI0 PC1 controller stylized as ARMIDUINO.

The ARMIDUINO

Description

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.

Brief explanation of Banks and MIDI PC Messages

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

MIDI Program Controller (Generic Implementation)

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.

Generic Implementation \ Encoders are indexed 0 to 3 going left to right

The control scheme for this implementation is as follows:

MIDI Program Controller for the YAMAHA DD75 (Device-Specific Implementation)

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

Yamaha DD75 Implementation \ Encoders are indexed 0 to 3 going left to right

The control scheme for this implementation is as follows:

Required Parts

Optional Parts

Assembly Instructions

assembly gif Please follow this guide.

Future Plans

Known bugs

Appendix

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.

Version Log

V1.0.1

Change:

Fix:

V1.0.0

Official Release of Software and Guide

If you have any questions feel free to submit an issue.