|
ChordTrigger - Clockbased MIDI-Chord Slicer for VMC
SQ-3P is a software to run on the VMC-system.
It provides a MIDI step sequencer inspired by the sequencers in the
Roland JX-3P and SH-101. The software is published as open source under
the creative commons license 'by-nc-sa 4.0'
For the Installation please use the ARDUINO IDE, see https://www.arduino.cc/en/software.
An introduction how to upload the program with the Arduino IDE can be
found here.
ChordTrigger - Users Manual
Firmware Version 0.7
VMC-1 Hardware Version 1.5.4
THIS IS A BETA-VERSION
'ChordTrigger' is a programm for an Arduino Nano mounted on a “fanwander
VMC-1'. The programm reads incoming MIDI-notes and sends
them out according to a rhythm given either bei an internal or external
clock, or by an internal synchronizable rhythm-sequencer. The velocity
of the sent notes can be set manually, with an controllable random
variation or by an additional velocity pattern with separate pattern
length.
If your VMC-1 runs a different software at the moment, then please
consult the programming instructions for the VMC-1 on how to
install software. In this case you have to perform a 'Factory Reset' as
described in the section 'setup menu'.
You should check the instruction for 'Adjust Poti-CVs' in the section 'setup menu'.
Quickstart...
...for those, who think they don't need manuals:
- The function of the five buttons
|
PLAY
|
STOP
|
WRITE
|
F1
|
F2
|
Stop Mode
|
Play
|
|
Write
|
Enter
Setup
|
Display
|
|
Play Mode
|
|
Stop
|
Play Mode
|
- reserved -
|
Display Mode
|
Velocity Mode
|
Write Mode
|
End
& Play
|
End
& Stop
|
Back
|
Trigger
Pattern
|
Velocity
Pattern
|
Tie
|
Rest
|
|
Setup
Mode |
Select Param
|
Exit Setup
|
Edit
|
< Parameter >
|
Set Param
|
|
|
Set
|
-- Value ++
|
- Good Luck :-)
Now more details for the patient ones...
Connect and Configure the Hardware
This is described in the users manual of the VMC-1.
MIDI connections
Basically you need a device which sends MIDI-notes (I will call this
'the keyboard') and a device which can create sounds from MIDI-notes (I
will call this 'the synth'). I will not explain how to connect MIDI
devices. So establish the following MIDI connections
Keyboard-MIDI-Out
<-> VMC-1-MIDI-In,
and
VMC-1-MIDI-Out
<-> Synth-MIDI-In.
Usually you will get a VMC-1 with the ChordTrigger software loaded, and
set to
factory settings. To test with the factory settings of the
ChordTrigger, set
keyboard and synth to MIDI channel “1”.
For other settings please consult the description of the “setup menu”.
In STOP mode the keyboard should play the synth directly
Press PLAY, set the potentiometers of the VMC-1 to the center position
and hold at least one key on the keyboard. The synth should play this
note in a rhythmical pattern.
Generic Function
The ChordTrigger reads notes coming from the
keyboard and stores them
as a single chord as long as at least one key is pressed. If all keys have been released, the chord is regarded as completed and a new key-press
will start a new chord. This chord will be played rhythmically. The
according rhythm can be either a constant clock (internal or external);
it can be a rhythm pattern stored internally; or it can be triggered by
an external trigger signal, which may have its own pattern.
So let me first describe how to write the patterns:
WRITE - Create Patterns
The ChordTrigger has two separate patterns; one for the triggers, the
other for the velocity modulation. I will first describe the trigger
pattern and will explain the difference of the velocity pattern then.
To write a pattern for triggers or velocity the ChordTrigger must be in
STOP mode.
- Press the WRITE button.
=> the
display says “F1=Trig
F2=Vel”
- If you want to write the pattern for the triggers, then
press the F1
button (if you want to write the pattern for the velocity modulation,
then press the F2 button).
=> the
display says now either "WRITE T" for trigger pattern or "WRITE V" for the velocity
pattern.
- Now you can enter three possible values:
- play one note on the keyboard for a trigger => a “+” (plus) will appear
for each step in the lower line.
- hit the F1 button to prolongating the trigger => a "-" (dash) will appear in
the lower line
- hit the F2 button for a pause => a "." (dot) will appear in
the lower line
- Hit STOP and then PLAY.
=> the
display will show the entered sequence in the lower line. If you play
now notes on the keyboard, you will hear the note played in the rhythm
provided by the pattern (provided that you are still in the factory
settings)
The WRITE-mode ends either if you hit STOP or PLAY or
it ends automatically if you reach the limit of 64 steps.
The velocity pattern is written the same way as the trigger pattern,
but you have to hit "F2" at the second step.
Similar as the trigger pattern, the velocity pattern is represented in
the display by the characters '+', '-', and '.' . In this
case '+' is the
highest
value, '.' is the
lowest value and '-'
is the center between those two values.
PLAY - Triggering Chords
To get into the play mode press (surprise surprise...): PLAY.
As already described: The ChordTrigger reads notes coming from the
keyboard and stores them
as a single chord. The chord will accumulated from the incoming note
data until no key is pressed.
In play mode the display shows in the firstline something like
this:
- The 'PLAY'
(you allready guessed that) describes the mode.
- The first number is the count of notes in the actual chord. In the example the current chord consists of three notes.
- The second number is the count of actually pressed keys. If
no key is pressed it is '0'
(zero)
- The +-.+. characters in the secondline represent the played steps. I will explain them later
There are several methods to enter a chord:
- Play the chord on the keyboard as a piano player would do
- Press
and hold(!) the key for one note of the chord with one finger; then
press with another finger (of the other hand) the other notes of
the chord one after the other. Then release the held note. The
following example will enter a Cmaj7 chord:
Right Hand: ....E...G..H.....
Left Hand: ..C----------....
This way you may enter chords which spreads over the full keyboard
range, and which a pianist never could play with two hands.
- Play the chord broken, but overlapping legato. Again a
Cmaj7 as example:
.........H----.
.......G----...
....E----......
..C---.........
The program handles a chord up to 12 notes (if required this number can
be extended easily in the program code).
The chord generated this way will be played in several ways, depending
on various mode settings:
Play Mode
There are two play modes.
In the held mode the incoming notes are handled as if a
hold-pedal
would be used with the keyboard. Even if you release all keys on the
keyboard, the ChordTrigger will continue to play the last entered chord.
In the keyed mode the ChordTrigger will output the triggered
notes
only as long as one key on keyboard is pressed
While PLAY you can toggle between the two modes by pressing the WRITE
button. The default play mode can be set in the setup menu.
Trigger Mode
There are two trigger modes:
In the clock mode the chord will be repeated with each tick of
the
clock.
In the pattern mode the chord will be played accord to the
rhythmic
pattern that was entered in the 'WRITE' mode. The pattern consists
of notes-steps, tie-steps (prolongates the former step to the next),
and rest-steps.
The trigger mode can be set in the setup menu. It cannot be toggled
directly while playing.
Velocity Mode
The ChordTrigger does not use the velocity of the incoming notes for
the outgoing chord notes (I tried that, but - though I am a
trained
piano player - I did not find it very useful).
Since especially in clock mode the constantly repeating chords would
become quite boring, there is the possibility to send the chord notes
with variable velocity values. Of course this will have an effect only,
if your synth can handle the velocity information. (It is
planned to extend this feature to any CC or NRPN-value in a later
version)
These variations of the velocity data can be created in four different
modes:
- Constant
- Random
- Pattern 0-1
- Pattern -/+
In the constant mode the velocity is taken from the
potentiometers CV-1 and CV-2. This way the velocity can be modulated by
voltages via the inputs CV-1 and/or CV-2. Usually one will leave CV-1
without an external control voltage and use it as a generic setting
and use CV-2 for the modulation. The resulting velocity is applied to
all notes of the chord.
The random mode works basically like the constant mode,
but
a random value is added to the generic setting of CV-1. The amount of
this random modulation is determined by CV-2. A voltage applied to the
input CV-2 will not modulate the velocity directly, but will determine
the range of this amount setting.
This random velocity level is provided for each note of the chord
separately! Moderate amount settings will result in chord variations
like an average trained piano player would create. Extrem settings can
have results that remind more to a new sequence than to the original
chord. (This note-individual modulation will not be possible
for the planned CC or NRPN function)
In the two 'pattern' modes, the velocity can have three
different values. Again CV-1 determines the base velocity. CV-2
determines the amount of
the value changes caused by the pattern:
- in the mode
Pattern 0-1' the pattern values are added to the base
velocity,
- in the mode
Pattern -/+' the '+'-values increase the
base velocity, '.'-values
decrease the base velocity. A '-'-value does not change
the base velocity.
The velocity value is applied to all notes of the chord.
Since the velocity pattern can have a pattern length different to the
trigger pattern, the results can be very complex.
STOP - to play or not to play
In the stop mode usually all incoming notes are forwarded to the output
(including velocity). It is possible to deactivate this soft-thru-function
in the setup menu.
Setup Mode
In the setup mode you configure the general behaviour of the
ChordTrigger. You
can enter the setup mode in play mode or in stop mode. In write mode
the setup is not available.
- To enter the setup menu press F1 and F2 together.
- The display will change and list the actual parameter in
the upper line. The lower line will display the actual value of the
parameter.
- To page through the parameters use F2 for “next” and F1 for
“previous”. The setup starts always with “transpose mode”. For clock
select, save sequence, or load sequence you may use the
“previous”-function; for the note modes and channel settings you may
use the “next”-function. You may step through all parameters in a
circle in the both directions.
- To change the value of a parameter press WRITE.
=> An exclamation mark (“!”) will appear at the start of the lower
line to mark the EDIT mode.
- Change the value with F1 (=decrease by one) and F2
(=increase by one). To change in larger steps you can use a combination
of F1 and F2: Press and hold F1 and a short press on F2 will decrease
by ten. Press and hold F2 and a short press on F1 will increase by ten.
- Press WRITE again to leave the EDIT mode.
=> the value will be stored in the non volatile memory and the “!”
disappears.
- To leave the setup menu press PLAY and STOP together.
If you have entered the setup mode while the sequence was playing, the
sequence will continue playing, but you cannot stop it in setup mode.
You have to leave the setup mode to stop a playing sequence.
Since the internal clock is software created and the setup mode eats up
a lot of processing, the internal clock will assumingly become a little
slower.
List of the available Parameters:
- 'ChordPlay Mode': determines when chords will be triggered .
- 'Trigger Source': selects between the clock and the pattern
as trigger source.
- 'Velocity Mode': selects the type of velocity modulation.
- 'Out-Channel': sets the MIDI channel on which the
ChordTrigger
sends its sequence.
- 'In-Channel': sets the MIDI channel on which the
ChordTrigger
expects incoming note data.
- 'Note-Thru': determines whether incoming notes are
forwarded to the synth in the stop mode.
- 'Control-Thru': sets whether incoming MIDI-ControlChange
data are forwarded to the synth.
- 'Program-Thru': sets whether incoming MIDI-ProgramChange
data are forwarded to the synth.
- 'Bend-Thru': sets whether incoming MIDI-Pitchbend data are
forwarded to the synth.
- 'OtherCh-Thru': sets whether MIDI-data on other channels
than the out channel are forwarded to the MIDI out.
- 'Adjust Poti-CVs': adopts the software for the real
potentiometer values
- 'Factory Reset': restores to the default parameter values
and loads the test sequence
- 'SaveSequence': saves the actual sequence in the EEPROM
- 'LoadSequence': loads the sequence from the EEPROM
- 'Clock': selects the clock source, and (MIDI-)clock division
Now the detailled desciption of the parameters
ChordPlay Mode
The ChordPlay Mode determines when chords will be triggered.
Value |
Comment |
Held (Factory
Default) |
As soon as one key has
been pressed the chord will be played until the next chord is entered.
The chord triggering will continue until STOP is pressed
|
Keyed |
Triggered chords will be
sent only as long as at least one key is pressed.
|
This mode can be toggle while the play mode by wressing WRITE
Trigger Source
This selects the source of the triggers for the outgoing chords.
Value |
Comment |
Pattern
(Factory Default) |
The pattern triggers the
outgoing chords
|
Clock |
The clock signal triggers
the chord continuously (see also setup for "clock source"
|
Velocity Mode
This selects the type of velocity modulation for the outgoing chords
Value |
Comment |
Constant
(Factory Default) |
The velocity for the
outgoing chord is determined by both the potentiometers CV-1 and CV-2
and the corresponding control voltages respectively
|
Random
|
A random value is added to the base value
set by potentiometer CV-1. The amount of this random modulation is
determined by CV-2. A voltage applied to the input CV-2 will not
modulate the velocity directly, but will determine the range of this
amount setting.
|
Pattern 0/+ |
The base value is set by potentiometer
CV-1. Pattern values '-'
are added half, pattern values '+' are added full. The
amount of the pattern value addition is determined by CV-2
|
Pattern -/+ |
The base value is set by potentiometer
CV-1. Pattern values '-'
are subtracted from the base value, pattern values '+' are added to the base
value. The amount of the pattern value addition / subtraction is
determined by CV-2 |
Out Channel
The MIDI-channel on which the sequence and thru'ed
Program/Control/Bend-data are sent out.
Value |
Comment |
1 - 16
(Factory Default = 1) |
Pay attention if you are
in
playmode:
Changing the Channel while the sequence is playing or thru'ed notes are
active will cause note hangs. In some special cases this may be wanted
behaviour, so we did not prevent this.
To end these hangs while play mode switch back to the former channel,
leave the setup mode and press TIE (the sequence will play on) or STOP
(the sequence will stop). |
In Channel
The MIDI-channel on which the ChordTrigger expects the data, that shall
be
written into the sequence.
Value |
Comment |
0 = Out-Channel (Factory
Default)
or
1
- 16 |
Incoming MIDI data on the
in-channel will be sent out on the
out-channel. This is valid also for control, programchange, and
pitchbend data!
It is recommended to deactivate OtherChannelThru if in-channel and
out-channel are different.
The main intention for this feature is that you may have a single
keyboard, but several ChordTriggers (or similar devices) in the thru
chain. In
that case you don't have to change the send channel on your keyboard,
but simply use the out-channel on the ChordTrigger.
Otherwise we recommend to set the In-Channel the same as the
Out-Channel. |
Note Thru
This parameter determines under which condition note messages from the
keyboard (= on the in-channel) are forwarded to the synth (= on
the out-channel) in stop mode.
Value |
Comment |
Off |
Incoming note data are not
forwarded in stop mode.
|
Thru while Stop
|
Incoming note data will be
forwarded
while stop mode.
|
Control-Thru
Determines whether MIDI controlchange data from the keyboard (=
in-channel) are forwarded to the synth (=out-channel)
Value |
Comment |
On (Factory
Default) |
see general comment
regarding
the thru modes below
|
Off
|
|
Program-Thru
Determines whether MIDI Programchange data from the keyboard (=
in-channel) are forwarded to the synth (=out-channel)
Value |
Comment |
On
|
see general comment
regarding
the thru modes below
|
Off
(Factory
Default) |
|
Bend-Thru
Determines whether MIDI controlchange data from the keyboard (=
in-channel) are forwarded to the synth (=out-channel)
Value |
Comment |
On (Factory
Default) |
see general comment
regarding
the thru modes below
|
Off
|
|
!!! Important Remark on
Thru-Modes !!!
If you use the same device as keyboard and as synth then all those
Thru-settings depend on your instrument.
If the instrument has a local-off mode, then you should activate this
local-off mode and you should set all Thru-settings to “On” and the
NoteThru not to “On”. For example my Rhodes Chroma Polaris in local off
mode needs ControlThru and BendThru set to “On”. Otherwise the Chroma
Polaris could not be edited. But ProgramThru has to be set to “Off”.
Otherwise a MIDI-Loop on program change commands would happen and bring
the whole MIDI-system to hang.
If the instrument has not(!) a local-off mode then you MUST set all
Thru-settings to “Off”. Otherwise you would create an endless MIDI-loop
which typically makes all processors overload and leave the system in
unusable state, which typically can be solved only by switch off both
the synth and the ChordTrigger. The same is valid if you use the
ChordTrigger at the
input and output of a MIDI-sequencer like Logic, Cubase, Ableton,
Reaper, what ever…
OtherCh-Thru
Determines whether incoming MIDI data (no matter which type) in
channels other than the out-channel are forwarded to the output.
Value |
Comment |
On
|
A high MIDI traffic on
other
channels will affect the performance of
the ChordTrigger since every data byte has to be handled by the
processor. It
even may cause the sequence to stutter or to stop. (Imagine an
orchestras
conductor who also has to hand out dishes from the kitchen while the
concert all the time...) |
Off
(Factory
Default) |
|
Adjust Poti-CVs
Potentiometers are produced with a tolerance of 10% or even 20%. This
function adopts the software to the individual potentiometers in this
circuitry. This procedure has to be done after a factory reset.
Value |
Comment |
no value -
display reads:
Press
Write |
After pressing WRITE a
screen will be displayed like
SET
POTIS TO MAX
!THEN
PRESS WRITE
Turn
the three potentiometers fully clockwise. Then press WRITE. The
adjustment procedure will run automatically and display the
potentiometer it is working on. Depending on the offset you will see
the adjustment parameters counting up or down. Finally the display will
read 'Tempo
is good!'
and switch on to the next knob. The display will switch to 'CV-1' and
after some counting the display reads 'CV-1 is good!'.
The display will switch to 'CV-2'
finally, and after some couting the process will end with 'CV-2
is good!'.
If you did not set the potentiometers to the maximum before pressing
WRITE the second time, then wrong offsetvalues will be stored. This
won't harm the
module electrically, but unwanted effects might happen on the MIDI-out.
If this happens, simply repeat the procedure with the potentiometers
set to maximum really.
The offset-values will be stored in the non-volatile EEPROM. So usually
this procedure has to be called only once. |
Factory Reset
Writes the factory default settings in the non-volatile EEPROM and
loads them then into the runtime
memory.
Value |
Comment |
no value - display reads:
Press
Write twice |
Press the WRITE button
twice. The display will change to 'Reset EEProm', and then you will see
the 'Load Pattern' display (see below).
After the first WRITE you can cancel the Reset by pressing STOP.
This should not be done in PLAY mode. Hanging notes and other unwanted
issues might occur.
Since the factory reset overwrites the settings of the
potentiometer adjustment you have to redo the potentiometer adjustment.
|
Load Pattern
Loads the sequence stored in the non-volatile EEPROM into the runtime
memory.
Value |
Comment |
no value - display reads:
Press
Write twice |
Press the WRITE button
twice.
You
will see a short flicker, when the
function counts the notes and steps.
Then the lower line reads “Load Done”.
After the first press on WRITE you can cancel the Load-action by
pressing STOP.
Load should not be done in PLAY mode. Hanging notes and other unwanted
issues might occur.
|
Save Pattern
Saves the sequence from the runtime memory in non-volatile EEPROM.
Value |
Comment |
no value - display reads:
Press
Write twice |
Press the WRITE button
twice.
You
will see a short flicker, when the
function counts the notes and steps.
Then the lower line reads “Save Done”.
After the first press on WRITE you can cancel the Save-action by
pressing STOP.
Save may be done in PLAY mode, but the pattern may stumble if the save
action takes longer than one step of the pattern.
|
Clock
Selects the clock source and the division factor, if the MIDI-clock is
used. This setting is not stored in the internal memory. After
switching off and on, always the internal clock is used.
Value |
Comment |
Internal
(Factory default) |
The internal
clock generator is used. Neither MIDI-clock nor MIDI-start/stop
commands are recognized |
MIDI-clock 1/16 |
MIDI-clock is
used with 16 triggers per 4/4-bar. |
MIDI-start/stop
and(!) the internal START/STOP buttons are recognized. The pause
function works only with the internal START-button |
MIDI-clock 1/8 |
MIDI-clock is used with 8
triggers per 4/4-bar |
MIDI-clock 1/4 |
MIDI-clock is used with 4
triggers per 4/4-bar |
MIDI-clock 1/1 |
MIDI-clock is used with 1
trigger per bar |
MIDI-clock 2/1 |
MIDI-clock is used with 1
trigger every second bar |
MIDI Start/Stop |
Internal clock
is used, but start and stop commands from MIDI are recognized |
Attention! Do not change these settings while the
chord trigger is running!
All product names and brand names beside “VMC-1”, “ChordTrigger” and
“fanwander” belong to the corresponding owners. They are mentioned only
for educational purposes.
All rights reserved, by Florian Anwander 2020 - 2022
|
|