Completed assistant's 'relative durations' option.

Tested performing with the 'Relative Symbols' radio button selected
in the upper options panel.
Bug fixed in Sequence.prototype.setTracks(). Account is now taken of
empty tracks.
Beginning to implement performer's continuous controlers

Revised the upper options dialog, including 3 drop-down menues for
setting the continuous controllers which will be associated with the
live performer's 3 continuous controller inputs.
On an EWI, the 3 controllers are aftertouch (breath pressure), pitch
bend and modulation wheel (bite). My E-MU keyboard produces channel
pressure (key pressure), pitch wheel and modulation wheel info.
The keyboard's channel pressure info is treated internally by the
Assistant Performer as if it was really aftertouch info.
The options dialog is now working correctly, and the options are
copied to the jiAPControls options object in the same way as with all
the other options (in apControls.getRuntime().getOptions()), but the
new options do not yet do anything.
Physical pitch-wheel now working.

Connecting the physical pitch-wheel to 'pitch-bend' and the normal
continuous controllers now works (tested with volume and pan), though
this is obviously patch-dependent.
Revised the comments on the upper options panel to describe what I'm
aiming for: NoteOn velocity and pitch will replace the values in the
performer's channel in the score. The performer's controller input will
be added to the controller info in the score.
TODO: physical mod wheel and channel pressure/aftertouch input.
ISSUE: Is the sending of channel pressure working? This is difficult to
test because its patch-dependent. Is this really a 3-byte command? This
needs checking carefully.
KNOWN BUGS: This all needs testing with the Study 3 score...
Physical mod-wheel and aftertouch input working.

All three physical controllers can now be used to send controller
information to the performance.
The E-MU sends channel-pressure messages when pressing keys harder or
softer. These are arriving as 3-byte messages containing their value in
data1. I am constructing outgoing channel-pressure messages in the same
way, but cannot currently test to see if they are working.
TODO NEXT: Overloading NoteOn information in the live performer's
track.
KNOWN BUGS: When playing Study 3.
Overriding with NoteOn pitch and velocity implemented

Both of these now work. The algorithm is as follows:
If one or more of the four options (soloTrackPitch, otherTracksPitch,
soloTrackVelocity, otherTracksVelocity) is set,
a) the lowest piched NoteOn message is found in the first moment in
the subsequence to contain a NoteOnMessage.
b) using this message, the differences between the pitch and velocity
values in the performed message are calculated (pitchDelta and
velocityDelta)
c) pitchDelta and velocityDelta are added to all the appropriate
values in the subsequence. The message in (a) -- in the performer's
track -- thus gets the performed pitch and velocity.
Note that all these searches and calculations are done in real time
when the performer plays a key, and before the subsequence is
actually played. Response may therefore be a bit sluggish in largeLarge subsequences may be a bit sluggish
subsequences.
TODO: test with Study 3 (debug). Write Up in the document 'About
this version of the Assistant Performer'
Assisted performances now start automatically

Simple change: When the 'Start' button in the upper options panel is
clicked, if the MIDI Input is set (i.e. this is an assisted
performance), the 'Go' button is clicked automatically. This simply
avoids a superfluous click, and frustration when the performance
fails to start because one has forgotten to click 'Go'.