In this article, I attempt to explain what is MIDI and how it is used in controlling MIDI devices such as guitar effects. There are many technical explanations out there on the internet, but I'm going to attempt to explain it in how best I think a beginner (some call themselves Midiot but hey, we were all new once!) would understand, without diving into the technical terms and details.
MIDI is a one-way communications protocol to enable a MIDI controller to communicate with a MIDI device (or devices). Program Change messages typically controls banks or presets, while Control Change messages control functions on the device.
What is MIDI
MIDI is simply a communication protocol to enable communication between 2 MIDI devices. That is all it is. I won't care much about the implementation details here. It just lets a controller communicate with another MIDI device. MIDI communication is one way and not bi-directional. That means that after the MIDI Controller sends a message to the MIDI device, the relationship ends there. It does not expect to receive any acknowledgement message or any other messages back in return.
[The technical stuff if you really want to know]
Simply put, what is it doing is sending 1s and 0s from one MIDI device to another MIDI device via serial communication with a specified baud rate (31250 bps). When the bits (the 1s and 0s) reaches another MIDI device, it will use the MIDI protocol to "decipher" the bits into something it understands.
The MIDI protocol has several different messages, where the most common in our field are:
1. Program Change Message
2. Control Change Message
Program Change Message
Program Change (PC) messages are typically used to select presets or banks in other MIDI devices. There are 2 parameters for this message:
1. PC Number
2. MIDI Channel
Control Change Message
Control Change (CC) messages are typically used to control functions on a MIDI device. There are 3 parameters for this message:
1. CC Number
2. CC Value
3. MIDI Channel
How are MIDI devices connected
MIDI devices are connected by connecting a MIDI Controller's MIDI OUT port to another MIDI device's (let's call this the downstream device) MIDI IN port. If the downstream device has a MIDI THRU port, you can connect another MIDI device that you want to control.
MIDI THRU ports are hardwired from the MIDI IN port, which means that whatever messages that flow into the device's MIDI IN port will be mirrored to the MIDI THRU port.
However, not all devices have a MIDI THRU port. Most just have a MIDI OUT port, which means that the incoming messages are processed by the device's micro-processor first before being sent to the MIDI OUT port. Not all devices that have a MIDI OUT port passes the incoming messages thru. It really depends on the manufacturer.
How do devices know if the MIDI messages are for them
The MIDI protocol allows for 16 channels in the messages. MIDI devices can also be set to a channel. If the MIDI device receives a message that corresponds to its channel, that means that the message is meant for it. If not, the message will just be ignored.
Some MIDI devices can set their MIDI channel to OMNI, which means that it will respond to MIDI messages on any channel.
Example: Strymon Timeline
Let's use the Strymon Timeline's MIDI implementation as an example. You can find this in the Strymon Timeline's User manual.
The Strymon Timeline MIDI Specification states that if it receives a CC message with number 3 (CC#3), that message will set the Time parameter (or rather, control the Time knob). The value range it allows it between 0 and 127. That means that if you send a CC#3 message with value 0, it is equivalent to turning the Time knob all the way down, while a value of 127 is equivalent to turning the Time knob all the way up.
Another part of the MIDI specification elaborates on the MIDI PC implementation. Do note that Patch Change and Program Change would mean the same thing: PC message. Here, it states that if it receives a PC#0 message, Preset 00A will be selected. A PC#3 message would select Preset 01B.
How MIDI is used in the your MIDI devices is really up to the manufacturer and how they designed it. You will need to refer to their MIDI Specifications to check which CC message control what functions, or how PC messages interact with the device.
From a MIDI Controller's perspective, it is simply sending out MIDI messages that it is programmed to send out. How the MIDI device it sent messages to reacts to the incoming MIDI messages is out of its scope.
If you are using a MIDI controller with a USB MIDI feature, you can use a MIDI monitor to monitor your out-going messages, like www.midimonitor.com. If the messages are appearing as expected but you still cannot get your device to respond, you might want to check your MID cables or MIDI device if you have set it up correctly.
I hope that helps! Please feel free to leave feedback if you think certain aspects could have been more simply or better explained.