MIDI stands for Musical Instrument Digital Interface. It's a series of protocols agreed on by hardware manufacturers, and represents a common standard that enables musicians to use multiple hardware devices from different companies. MIDI code does not contain musical information, but data, usually transmitted by a MIDI keyboard, or other form of MIDI input device, like a MIDI guitar, MIDI Wind instrument, etc.
The simplest form of MIDI data is note on, then note off, but MIDI data can also be used to transmit the speed at which a key was pressed, whether or not additional pressure was applied after the key was pressed, the amount of rotation applied to a modulation wheel, when a sustain pedal is used, etc....
Many modern Midi devices have three MIDI ports, being MIDI In, MIDI out, and MIDI thru, which enables a Midi device, or program that has MIDI thru as a component, to "pass on" midi data, to another midi device or application. Although device and application specifications may vary, there are some constants, in keeping with the generic nature of the standard midi data set. Generic, or General Midi Instrument sets, called Banks, contain 128 Instruments, often called Patches. These are numbered 1-128, or 0-127, dependent on the device or application manufacture, but represent a common patch 'map' of 128 instruments, which at the standard specification, are called General Midi banks and patches. (GM is a common abbreviation)
Banks and patches can usually be selected or assigned from MIDI devices or applications, and are done so through "Midi Channels". (also known as Mcha, with the specific channel number added, i.e. Mcha1) There are 16 of these per device, and manufacturers and application builders, in some cases, have added the capability of using multiple devices at once. Linuxsampler is an excellent example of this, as a sample player capable of adding multiple devices, and Open Octave Midi has the capability of creating multiple device connections, enabling the composer to add as many devices as his computer hardware is capable of handling.
In many Midi sequencing applications, designed to record MIDI data, and in some cases, edit that data, through the use of Editors, the composer can assign 1 midi channel per track, but some applications are capable of handling multiple midi channels within a track, which may be particularly useful for orchestral composers, for whom multiple articulation assignment is the norm.