You are on page 1of 5

midiO (version 1.

3)

Introduction

MidiO is a small Audio Unit that can be used to drive MIDI based
devices with the notes from a software instrument track. This allows
one to drive external hardware from an Audio Unit host that does not
directly support MIDI out (such as Garageband). In its current form, it
is not intended to be a general purpose, full functionality MIDI
interface. What it does do is send the MIDI notes and other messages
from a software instrument track to some other MIDI enabled program
or device. It does not support the direct export of a MIDI track to a file.

Installation

If you want midiO available to every user, copy midiO.component to:

/Library/Audio/Plug-Ins/Components

Otherwise, copy midiO.component to your user library:

/Users/<user name>/Library/Audio/Plug-Ins/Components/

Price

MidiO is freeware. However, if you like it, please consider a small


donation to your local chapter of the American Cancer Society. Also,
any comments via email to retroware@comcast.net would be
appreciated.

Usage

The following note details how to use midiO from GarageBand version
3.0. Usage with other hosts is similar, however the process of setting
up and configuring a software instrument track will differ.

From within GarageBand, first create a software instrument track.


Double click this track. This will bring up an information panel that
describes the currently selected software instrument.
shot 1.png

To edit the instrument used for the track, clck the "details" triangle in
the lower left hand corner of the panel. Then, from the generator menu
choose "Midi Out".

shot 2.png

Clicking "Details..." brings up the following screen:

shot 3.png

From the "Generator" menu chose "midiO".

Next, set midiO's parameters by clicking on the "pencil" icon to the


right of the generator menu. This brings up the following screen:

Screen shot 2009-09-19 at 9.05.24 PM.png


The MIDI destination pull down allows one to specify the MIDI output
device that midiO will send messages to. Any connected hardware
MIDI interfaces should show up in this menu.
The channel pull-down specifies the channel number to which MIDI
messages will be sent. If one imported a MIDI file into GarageBand, the
MIDI notes contain channel information. In this case, choosing the
"note" menu item will send the channel number associated with the
MIDI note.

MidiO can also send MIDI clock messages. Simply choose "on" from
the MIDI clock pull down menu. In addition to MIDI clock messages,
MIDI start/stop messages will be sent when the transport is
started/stopped. Only enable MIDI clock on one track per MIDI device.
Otherwise, multiple MIDI clock messages will be sent. Also, midiO's
clock is not particularly accurate with respect to the underlying track
clock. It should however be sufficient to start and top external
hardware.

If you imported a MIDI track to GarageBand that had a program


change/bank select
message GarageBand/midiO will transmit that message. However, a
track constructed entirely in GarageBand will not have any program
change messages. Via the program and bank menus, one can choose
to send program and bank change messages. These messages will be
sent each time playback is started. If ones external hardware is
somewhat slow in responding to program change messages, it is best
place the first note on the track some time later, say one bar from the
start of the track.

Be careful when using midiO from GarageBand to drive an IAC bus.


When using midiO to drive and IAC bus, insure that the track selected
for MIDI input (a software track highlighted to light green) is not set to
a track that midiO is driving.

Picture 4.png

There is no way (at least that I know of) of telling GarageBand to


ignore certain MIDI sources. It is very important to select a different
track for MIDI in than for MIDI out. If one is trying to drive a software
synth via the midiO port, a dreaded MIDI loop in which the same notes
are repeatedly rendered will be created. If you Garageband slowing
down or stuttering, simply stop playback, choose a different
GarageBand track for input, and start again.

Caveats

Due to how Garageband render tracks, midiO will not generate clock
stop messages unless the track is selected for MIDI input.

MidiO is only designed to send MIDI messages to external MIDI devices


and/or
software synthesizers. It will not export your GarageBand project to a
MIDI file.

MidiO does not playback MIDI sysex messages. If this is important to


you, let me know. It should be relatively easy to add.

Disclaimer
Have fun but use completely at your own risk.

Acknowledgments

Derived in part from ExpertSleeper's


(http://www.collective.co.uk/expertsleepers/) Additive Synth AU. Thanks
guys!

Thanks to Ducky, Dave and Frank for testing.

And many thanks to Dmitriy who finally clued me into a solution for the
processor load/
stuttering problem.

Revision History

4/25/04 - 1.0: FCS


4/26/04 - 1.01: MIDI loop detection messages are now sent out channel
16 as opposed to the selected channel
5/16/04 - 1.1: Added ability to directly drive external MIDI devices.
Fixed a small bug in which control change messages were
not sent correctly.
5/18/04 - 1.11: Fixed GUI to work correctly with GarageBand 1.1.
Updated bundle
version identifier.
5/23/04 - 1.12: Dramatically reduced processor load. Should eliminate
most
stuttering/slowdown problems. Fixed a problem in which
buzzing
or humming would result when selecting midiO as a
generator.
5/24/04 - 1.13: Fixed a problem which would cause 1.12 to crash.
Realized that
one should select a different track for MIDI in, even
when driving an
external synth.

9/0/04 - 1.14: Further improvements in timing/processor load. If you


were having
stuttering/slowdown problems, please try this version -
it should
work much better. Still expect some timing issues
with very
complex garageband songs. Thanks Dmitriy!

3/2/06: - 1.2 Added MIDI clock/sync support. Totally revamped timing


code to
take advantage of better MIDI support in 10.4.

9/25/09 - 1.3 Passes AU validation. Compatible with 10.5. Better


handling of MDI
ports. Added bank and program change support.

You might also like