MIDI 4 / MIDI 5 and MIDI Support

Overview

MIDI Support, developed by ESP, is an operating system level mechanism for MIDI data handling, which provides facilities not present in Acorn's standard MIDI implementation (ie the module MIDI 3.14). It provides full backwards compatibility with the old system, thus allowing the use of applications which aren't specifically MIDI Support aware.

In a way analogous to printer drivers, MIDI Support uses a scheme of drivers, thus a range of different hardware MIDI interfaces are catered for through the use of the appropriate driver (supplied as a Module file). It is perfectly feasible for different brands of MIDI interface to co-exist within the system.

Backwards compatibility with Acorn's legacy MIDI system is achieved by implementing the MIDI4 (and MIDI5) modules as MIDISupport drivers, thus the four legacy MIDI ports are represented by four dedicated MIDISupport drivers.

Additionally, applications can register themselves with the MIDI Support system by creating a soft driver which then acts as a port for MIDI data transfer between the application and other elements of the system. It also provides facilities for the management of both hardware and software drivers, the buffering of data, and the routing of data streams between drivers.

Why ?

Using Acorn's standard MIDI implementation (MIDI 3.14), it was not really possible to run more than one MIDI-aware application at a time (which was a fairly major restriction in a multi-tasking environment such as RISC OS). Attempting to do so would generally result in data contention and/or corruption problems.

For example, if two or more applications attempted to read an incoming MIDI data stream, they could each end up receiving a partial image of that stream (data contention). This was because the act of reading an incoming byte removed that byte from the MIDI IN buffer, and as MIDI events are generally made up of 2 or 3 successive bytes, when 2 or more applications are reading MIDI input, they would each see fragments of the original data stream.

Similarly, if two or more applications were sending out MIDI data, their data could end up being interleaved into the single output stream with total disregard for the MIDI data protocol, resulting in nonsensical data (data corruption).

Some software manufacturers worked around this problem by providing the means to temporarily suspend MIDI transmission / capture, thus allowing some other application sole access to the MIDI ports.

The introduction of the MIDI 4 module brought enhanced performance over the previous release (version 3.14), whilst also providing hooks into the MIDI Support system. Coupled with MIDI Support, it provided a far more versatile system, enabling multiple MIDI-aware applications and MIDI interfaces to co-exist. Also, as all internal data transfers between drivers is 32-bit, each MIDI message (with the exception of system exclusive messages), is transferred as a single item, in the process eliminating the above mentioned problems of data contention and corruption.

MIDI 5 adds 26/32-bit neutrality along with improved performance due to better code optimisation. In association with MIDISupport 0.34 or later it also fixes a long-standing problem - now all four of the legacy MIDI ports are bi-directional (previously only the first two ports were bi-directional, the second pair being send-only).

The software elements

!MidiSupp

A pseudo-application !MidiSupp is used as a repository for all MIDI-related resources (relocatable modules). It also contains an application !MidiMan which is essentially a front end for the MIDI Support system, providing easy access to the facilities provided by the underlying module, along with configuration facilities. On a machine with the new-style Boot, !MidiSupp will typically live in the Boot:Resources directory.

There are 3 sub-directories within !MidiSupp used to house the various resources.

The two core modules are in !MidiSupp.Modules :

  • MIDIS - MIDISupport module
  • MIDI5 - MIDI module, version 5

In !MidiSupp.Drivers :

  • MIDI driver modules specific to individual MIDI interface hardware (the drivers for supported devices are listed below).
  • In the case of the DMI50 card, later versions of it's control module DMIControl (PowerWAVE) than is present in the card's ROM will also be found in this directory.

In !MidiSupp.PlugIns :

  • Any application stored in this directory will be available from !MidiMan's front panel window. Ie !MidiMan's front panel acts as an application launcher.

!MidiSupp's !RunImage is a transient program. That is, when run it does it's stuff and then immediately quits. Its stuff involves :

  • Establishing what MIDI hardware is installed in the machine.

  • Ensuring that only appropriate and the most recent modules are installed.

  • Setting up the routing as defined in a user preferences file (saved previously, from !MidiMan).

  • Installing !MidiMan in the ROM Apps pseudo directory, thereby making it easily accessible (as it is actually located fairly deep in the !Boot structure).


Programmers interested in writing applications which use MIDISupport should refer to the MIDI Support Functional Specification document.

Current module versions

Up until version 0.22, the MIDISupport module had an upper limit for the number of drivers (32) which could be installed at any given time. With version 0.26 or later, the number of drivers is unrestricted (other than by memory constraints). Version 0.34 brought 26/32-bit neutrality.

Core modules

Title Latest 26-bit only version Latest 26/32-bit version
MIDI 4.27 (27 Apr 1998) 5.01 (13 May 2007)
MIDISupport 0.33 (19 Feb 1999) 0.34 (06 Jan 2007)

Drivers

Title Latest 26-bit only version Latest 26/32-bit version
AKA10 ?? 2.24 (02 Feb 2007)
AKA16 2.19 (17 Nov 1997) 2.24 (02 Feb 2007)
DMI50 2.22 (17 Dec 1997) 2.24 (02 Feb 2007)
EagleMIDI 2.04 (03 Oct 1997) N/A
LarkMIDI 2.16 (03 Oct 1997) 2.24 (02 Feb 2007)
Mico_MPU401 0.01 (25 Apr 2000) N/A
MIDIMax 2.19 (17 Nov 1997) 2.24 (02 Feb 2007)
MIDIMaxII ?? 2.24 (02 Feb 2007)
MIDIPod ?? 2.24 (02 Feb 2007)
MKA16 2.16 (03 Oct 1997) 2.24 (02 Feb 2007)
ParallelMIDI 0.93 (01 Sep 1999) N/A
RiscStation_MPU401 0.06 (25 Apr 2000) N/A
SerialMIDI 0.09 (16 Feb 1998) 0.11 (21 Apr 2007)

!MidiMan

This is a front end for the MIDI Support system and provides full control of the system's features, enabling the user to re-route the flow of MIDI data between applications and interfaces as and when the user sees fit.

As mentioned above, it is possible to save the current setup as a user preference file which will be made use of by !MidiSupp.

!MidiMan is covered in more detail along with some sample screenshots here.

MIDI Support aware applications

I've written a number of small applications for use with MIDI Support. The following are available for download from this site :

!Debbie A controller for XG type synthesizers (eg the DMI50XG card).
!JunoEd A Roland Juno synthesizer voice editor.
!MidiMole A MIDI data monitor.
!SysExy A utility for use with MIDI System Exclusive messages.

Commercially available applications include :

!ArmEdXG A comprehensive controller for XG type synthesizers, eg the DMI50XG card, though no longer available (formerly Score Machine).
!MelIDI A well-featured MIDI sequencer (Liquid Silicon).
!Synth A sample-based General MIDI (GM) soft synthesizer (ESP).

Applications such as these that are specifically MIDI Support aware (ie they have their own MIDI Support soft driver) have the advantage that they can be connected independantly, rather than collectively as is the case when relying on the general Acorn MIDI ports.

Locating ESP products

MIDI Support (which includes !MidiMan) is no longer supported by ESP.

Liquid Silicon's Alan Gibson has produced 32-bit versions of the various modules (for both MIDI Support and Synth), necessary for use on Iyonix and A9 machines (and I've done the frontend applications).

Hence 32-bit versions of both MIDI Support and !Synth are now available from Liquid Silicon.