Conduct: A Conducting Program

The Conduct program allows you to tap a tempo to conduct a multi-channel MIDI sequence. The beats that you conduct are entered as one of the MIDI channels in the sequence. If you want to beat just quarter notes throughout the piece, you simply create one channel consisting of quarter notes on, say, middle C. This channel, called the ``solo'' channel is used only to match against incoming conducting input, and is not sent to MIDI Out with the rest of the sequence. You can also use the space bar to conduct.

To run the program, you can simply type

conduct filename
Conduct expects a MIDI file unless a .gio extension is provided indicating an Adagio format file. A .mid extension is added automatically if filename is not found. Once the file is loaded, the following options are available:
runs the conducting software.

sets a start time (in hundredths of seconds). The starting time resets to the beginning everytime you play unless you type b again.

plays (without conducting) from the designated start time. This is useful if you are trying to find the right starting time.

While playing, either ``+'' or ``='' makes the sequence go faster, and ``-'' makes the tempo slower. It only makes sense to use these keys when you are in a section that is not conducted.

Typing SPACE (i.e. the space-bar) is equivalent to playing a C4 on a MIDI keyboard. If the conducting channel puts all the beats on C4, then you can conduct the whole piece with a space bar. (Hint: pick up the keyboard and play it like a musical instrument!)

Typing ESC will send out an all-notes-off message on every channel. This is for emergencies when a note gets stuck on. To my knowledge, there are no bugs in Conduct that would cause this, but synthesizers do sometimes get overloaded and drop messages.

You do not have to reload the score to start again - just stop the score by typing ``z'', and restart by typing RETURN (or maybe b RETURN RETURN to restart at someplace other than the beginning).

Although I have described this as a conducting program, it is actually an early version of an accompaniment system that can follow the performance of any music, not just a conductor's taps. The current system expects the solo part to be monophonic, and it requires that you play each note in the solo part. (The score-matching software is very simple. It looks in the score for the next note to be played and waits for it. Anything other than the next expected note is ignored.) You can put in polyphonic solo parts, but the matcher only looks for the first note that matches anything in the chord and then moves on to the next chord.

Some of the things you might want to try, but which might not be obvious are:

  1. Don't conduct every quarter note, leaving some passages open. The tempo will be steady in these passages.
  2. At the end of a gap between conducted passages, choose a different pitch for the solo (conductor) part. That way, if an extra beat is conducted at the start of the gap, the program will not race through the gap to ``catch up'' with the conductor. Instead, the extra beat will be ignored because its pitch will not match the next pitch in the solo part.
  3. Conduct every note-onset in a melody, as in Max Mathew's sequential drum pieces.

There are lots of command-line options to set parameters. The syntax for a command line is

conduct file -switch1 value1 -switch2 value2 ...
conduct ?
to get a listing of the switches and a little documentation. The file is assumed to have a .mid extension if you don't give one.

The switches are the following:

-solo channel
give the MIDI channel of the solo part, e.g. ``-solo 1''.

print out lots of debugging info.

-pat cs
``Patience'', how far ahead the accompaniment can be before it stops and waits. The default is zero, e.g. do not get ahead at all. cs is the time in centiseconds, e.g. ``-pat 50'' means one half second.

-acc number
``Acceleration'', the maximum tempo change allowed per match. Tempo is in arbitrary units and 256 is the nominal or default tempo. So ``-acc 3'' will allow the tempo to change by about 1% (3/256) on each solo note. (That is when tempo is adjusted.) Bigger numbers make the system more responsive.

-pull number
Every second, the tempo is adjusted toward 256 by this amount. This tends to ``pull'' the tempo to the nominal performance rate given in the score. If pull is 0, then no adjustment is made; if pull is large, then the accompaniment will be very assertive about the proper tempo.

-fast number
This is the fastest the accompaniment is allowed to go. Small numbers are faster, large numbers are slower, and 256 is the nominal rate. The default for this parameter is 128, meaning that the accompaniment can run up to twice the nominal rate.

-ignore number
The accompaniment system ignores synchronization errors of this magnitude. Number is given in centiseconds, e.g. ``-ignore 5'' means ignore synchronization errors of 1/20 second. The default is 10.

-race number
When accompaniment is behind, it races to catch up at the rate given by the ``-fast'' option. Future versions will have the ability to skip notes to catch up, and the ``-race'' option will say how far (in centiseconds) the system should race to catch up rather than skipping notes.

Turn off MIDI Thru, which is on by default. (Amiga version only.)

Print out low-level MIDI data.

Do not send MIDI all-notes-off when done.

Trace music operations such as sending MIDI commands.

-tune filename
Load a tuning file. This causes the MIDI driver to send pitch bend commands to achieve non-equal tempered tunings.

-inport number
MIDI input port number. The Amiga MIDI driver can hook up to other applications by listening to their port as opposed to the hardware MIDI port (the default).

-outport number
Send output to this Amiga port instead of the hardware MIDI port.

Turn on more debugging code.

Turn on still more debugging code.

Print out data when the score is read in.

There are a few things that can be controlled by placing special MIDI messages in the score. These messages are note-on's with pitch 0 and low velocity numbers on any channel. No message is sent when these notes are encountered, and any corresponding note-off is ignored:

The first two special messages allow you to turn MIDI input on and off; when off, input does not affect the tempo. It is a good idea to bracket areas where there is no conducting with these messages so that if an extra beat is tapped the program will not race ahead to the next anticipated beat. The place to put these enable and disable messages is midway between beats to make sure the matching is definitely enabled or disabled on the beat.

Previous Section | Next Section | Table of Contents | Index | Title Page