MIDI is a venerable protocol (dating back to 1983) that is used to communicate between synthesizers, controllers, sequencers, sample players, computers, mobile devices, drum machines, and other electronic music making devices.
A simple and very common use case is to have a controller, such as a piano-style keyboard, send Note On and Note Off data to a music synthesizer (including software synths on your computer or mobile device).
Press a key and a message is sent telling the synth to play a specific musical note. Release the key and a message is sent to the synthesizer telling it to stop playing that note.
Getting a bit fancier than simple on/off messages, MIDI can also be used to send "continuous controller" CC messages, typically the result of turning a knob or pushing a slider on the keyboard controller. These can be used to sweep through the cuttoff frequency of a low pass filter, or modulate a tremolo, and many, many other parameters.
A similar scheme is also used to send pitch bend info -- often represented by a pitch bend wheel on the left side of a MIDI keyboard.
USB MIDI uses the same message protocol as classic MIDI, but does so over a USB host/device transport.
This makes it very simple to plug MIDI devices/controllers into computers and iOS devices, which act as the MIDI host. This is great, because it means you can control software synthesizers using something nicer than a computer keyboard!
On its own, the Wii Guitar Hero controller sends analog signals via I2C for all of its seven buttons, strum bar buttons, x/y joystick, and whammy bar. We'll use the Wii Nunchuck breakout adapter with the QT Py microcontroller to convert those I2C messages into MIDI notes, CC messages, and pitch bend from the whammy bar.
With the QT Py plugged into your computer or iOS device via the USB-Lightning adapter, you'll be able to play any software synth with your Guitar Hero controller!
Nearly any software synth (or DAW (digital audio workstation) you find will allow you to use USB MIDI to control the notes, pitch bend, and CC input. Here are some good ones to try:
Linux / Windows / mac os
free open source
Chrome Web Browser
- Viktor NV-1 https://nicroto.github.io/viktor/
- Juno-106.js http://juno-106.js.org/
free open source
- AudioKit Synth One (iPad only)
- DRC Polyphonic Synth by Imaginado (iPhone and iPad)