<html>
<HEAD>
<TITLE>ChordSelect Module</TITLE>
</HEAD>
<BODY BGCOLOR="#AAFFFF" TEXT="#000000" LINK="#3333AA" VLINK="#6666FF"> 

<H2>
<A NAME="ChordSelect">Chord Selection</A>
</H2>
This is not a module with a simple description...!  The premise is simple &mdash;
it extracts keypress combinations with desired characteristics from a MIDI stream,
and presents them for further processing, optionally with the comprising notes
individually identified in some fashion.  However, trying to list all the
possibilities in detail would be book-length.  An experimental strategy is
recommended!
<P>
At the simplest, the Control Panel sliders can be used to set the minimum and
maximum number of notes that will be considered a valid "chord" and processed.
In this mode, with neither the <B>Chord Type</B> nor <B>Root</B> selectors used,
no attention is paid to the actual notes involved &mdash; just the number.
<P>
By default, the selected notes will all be sent out as channel 1 events, with
On and Off events being passed much as they are received.  If fewer or extra
keypress events than specified by the sliders arrive, they are ignored.
Using the menu you can select other than this '<B>One Channel</B>' mode.
You can specify that all the notes of the chord should be tagged with
individual mark combinations, or each note can be sent out on a sequential
channel beginning at some Base value.  In this way, each note can be given
its own voice, or even more extensive post-processing.
<P>
By preceding this element in the path with a <B>KeyTrack</B>, the 
<B>Chord Type</B> and <B>Root</B> specification can be enabled.  (They are
not useable otherwise.)  These further limit the combinations that will be
taken as "chords" according to the boxes that are checked.
<P>
When a new chord is recognized it is processed from the lowest note to the
highest.  This has some consequences.  Specifically if, say, both two-note
and three-note combinations are recognized, a third note played <i>below</i>
a currently sounding two-note chord will <i>not</i> affect the two higher notes
(unless '<B>Strict Seq.</B>' is engaged); if the notes are being identified
by channel or mark, the added note will get the <i>same</i> identification
as the previous lowest note.
<P>
A chord with keys that are truly simultaneous (possible in the MusicWeaver
though not in sequential MIDI input or output) will alway be processed
correctly, as will one where the keys are pressed in low to high order
(however closely spaced in time), but of course in live performance this
is not the rule.  The slightly random result may or may not be pleasing.
Using a <B>ChordPacker/TimeSort</B> pair before this element will improve
the chance of a 'simultaneous' chord, at the expense of some latency
(perhaps tolerable in a secondary 'embellishment' path).

<h4>
Input
</h4>
<UL Type="none">
<LI> <B>Input</B> &mdash; MIDI stream to be processed.
</UL>

<h4>
Outputs
</h4>
<UL Type="none">
<LI> <B>Chord Out</B>
 &mdash; Extracted and identified events according to Control Panel settings.
<LI> <B>Input</B> &mdash; Pass through of MIDI Input (unaffected by any element
processing).
</UL>

<BR>
<h4>
Control Panel
</h4>
<UL Type="none">
<LI> <B>Chord Type</B> &mdash; Column of checkboxes to specify which types of chords
are to be recognized.<br>
If <i>no</i> box is checked, all notes will be processed,
regardless of any chord they might comprise. Any boxes checked will restrict the
element to processing just those types of chords.  No attention is paid to
inversion or the span of the notes.  [Must be preceded by a KeyTrack element.] 
<LI> <B>Root</B> &mdash; Column of checkboxes to specify the allowable chord roots.
<br>
If <i>no</i> box is checked, there is no restriction by root note. Any boxes
checked will restrict the element to processing chords with exactly those
roots (or those single notes if no <B>Chord Type</B>s are selected).
[Must be preceded by a KeyTrack element.] 
<LI> <B>Min Keys</B> &mdash; The minimum number of currently depressed keys that
will be considered to be a chord.  (If it is "1", individual notes will be
processed unless <B>Chord Type</B> or <B>Root</B> settings demand otherwise.)
<LI> <B>Max Keys</B> &mdash; The maximum number of currently pressed keys that
will be processed as a chord.  Any further keys will be ignored unless one
of those currently held is released.
<LI> <B>Strict Seq.</B> &mdash; (There's probably a better name...)
When set, it forces every (recognized) change to generate a complete new chord
corresponding to the currently active keys, turning all sounding notes off and
immediately generating the new set.  Releasing <i>any</i> key of a sounding chord,
or <i>adding</i> any invalid key, terminates the <i>whole</i> chord.<br>
If it is not set, notes of the chord are not released until their note-off
is received, and invalid keys pressed before this will not affect the current
chord.
</UL>
<h4>&nbsp;&nbsp;Menu Bar:</h4>
<UL Type="none">
<LI> <B>Options</B>  
 <UL Type="none">
 <LI> <B>RESET</B> &mdash; Clears the elements assumption of any current state.
 Make sure no notes arecurrently active first! 
 </UL>
<LI> <i>Mode Selection</i> &mdash; (default '<B>One Channel</B>')
Determines how each note of the chord is identified.
 <UL Type="none">
 <LI> <B>Sequential Marks</B> &mdash; Lowest note will be unmarked, next will have
 mark bit 1 set, third will have bit 2 set, the fourth will have bits 1 <i>and</i>
 2 set, and so on in binary numeric sequence.  (Note well that <i>multiple</i>
 marks will be set on some notes &mdash; not single marks as is standard with
 other elements!)  All notes of the chord will be on channel 1 (even if the
 source events had a different channel).
 <LI> <B>One Channel</B> &mdash; All notes of the chord will be unmarked on
 channel 1. 
 <LI> <B>Base 1</B> &mdash; Notes of the chord wil be on sequential channels,
 beginning with channel 1.  No marks are applied. 
 <LI> <B>Base 2</B> &mdash; As previous but beginning with channel 2 
 <LI> <B>Base 3</B> &mdash; etc... but note that Channel 10 (Percussion)
 will always be skipped.
 <LI> <B>Base 4</B>   
 <LI> <B>Base 5</B>   
 <LI> <B>Base 6</B>   
 <LI> <B>Base 7</B>   
 <LI> <B>Base 8</B>   
 </UL>
</UL>



</body>
</html>
