Somascape
RISC OS Matters—MIDI under RISC OS
HardwareMIDI Support/MidiManAKA16 and SASoftware

MIDI LEVEL 4 AND MIDI SUPPORT

*  Last updated : Fri 26 Apr 2002  *

---

Overview

MIDI Support 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.

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 to and from drivers.

--- Top ---

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 would be 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 new level 4 MIDI module provides enhanced performance over the previous release (version 3.14), whilst also providing hooks into the MIDI Support system. Coupled with MIDI Support, it provides a more versatile system, with facilities enabling multiple MIDI-aware applications and MIDI interfaces to co-exist, thereby totally removing the above mentioned problems of data contention and corruption.

--- Top ---

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. 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 - MIDI Support module
  • MIDI4 - MIDI module

In !MidiSupp.Drivers :

  • MIDI driver modules specific to individual MIDI interface hardware.
    Currently : AKA16, DMI, Eagle, Lark, MidiMax, MKA16, Parallel, Serial, PCSound, Mico and RiscStation.
  • 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 / utility stored in this directory will be available from !MidiMan's front panel window. Ie !MidiMan's front panel acts as an application launcher for any applications placed in this directory.

!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.

  • Installing modules and setting up the routing as defined in a user preferences file. Note that this !Config file is actually saved 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 MIDI Support should refer to the MIDI Support Functional Specification document, available from this site.

 

Current module versions

Up until version 0.22, the MIDI Support 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).

Core modules

Title Version Date
MIDI 4.27 (27 Apr 1998)
MIDISupport 0.33 (19 Feb 1999)

Drivers

Title Version Date
AKA16 2.16 (03 Oct 1997)
DMI50 2.22 (17 Dec 1997)
EagleMIDI 2.04 (03 Oct 1997)
LarkMIDI 2.16 (03 Oct 1997)
Mico_MPU401 0.01 (25 Apr 2000)
MIDIMax 2.16 (03 Oct 1997)
MKA16 2.16 (03 Oct 1997)
ParallelMIDI 0.93 (01 Sep 1999)
RiscStation_MPU401 0.06 (25 Apr 2000)
SerialMIDI 0.07 (03 Oct 1997)

 

!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 !Config file which will be made use of by !MidiSupp.

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

--- Top ---

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 synthesisers (eg the DMI50XG card).
!JunoEd A Roland Juno synthesiser 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 synthesisers, eg the DMI50XG card (Score Machine).
!MelIDI A well-featured MIDI sequencer (Liquid Silicon).
!Synth A General MIDI (GM) soft synthesiser (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.

 

MIDI Support and !MidiMan are both available from ESP : www or email

--- Top ---