2017-01-03 04:01:45 -05:00
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p>
|
|
|
|
Considering the numerical nature of MIDI events, it can be tempting to apply
|
|
|
|
mathematical transformations to our MIDI regions by using mathematical
|
|
|
|
operations. Ardour makes it very easy and powerfull with the Transform tool.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<figure>
|
|
|
|
<img src="/images/MIDI_transform.png" alt="MIDI transformation">
|
|
|
|
<figcaption>MIDI transformation</figcaption>
|
|
|
|
</figure>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Accessing the Transform tool is done by <kbd class="mouse">right</kbd> clicking
|
|
|
|
the MIDI region <kbd class="menu">><em>name_of_the_region</em> > MIDI
|
|
|
|
> Transform…</kbd>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
To act on a property, it must be selected in the <kbd
|
|
|
|
class="menu">Set</kbd> field, then the target value must be changed using the two
|
|
|
|
following fields. To add more operands the "+" sign should be clicked to
|
|
|
|
create new lines. These can be removed using the "-" sign on the
|
|
|
|
right of the newly created lines.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
In the picture above, the Transform tool has been used to add a bit of
|
|
|
|
humanization, by slightly changing the velocity of each note of the region, by
|
|
|
|
a random number between -19 and +19 from it's original velocity. So
|
|
|
|
three operations are applied:
|
|
|
|
</p>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-01-03 04:01:45 -05:00
|
|
|
<ul>
|
|
|
|
<li>Set velocity to this note's velocity</li>
|
|
|
|
<li>+ a random number from 1 to 20</li>
|
|
|
|
<li>- a random number from 1 to 20</li>
|
|
|
|
</ul>
|
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p>
|
|
|
|
Each note will trigger a calculation of its own, so its velocity will be
|
|
|
|
increased by a random number between 1 and 20, then decreased by a random
|
|
|
|
number between 1 and 20.
|
|
|
|
</p>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p>
|
|
|
|
The properties that can be computed are:
|
|
|
|
</p>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-01-03 04:01:45 -05:00
|
|
|
<ul>
|
2017-11-15 09:34:10 -05:00
|
|
|
<li>note number (eg C2 is note number 24, C#2 is 25 and <a href="@@midi-notes-ref">so on</a>)</li>
|
2017-01-03 04:01:45 -05:00
|
|
|
<li>velocity (the global intensity of the note, between 0 and 127)</li>
|
|
|
|
<li>start time (in beats)</li>
|
|
|
|
<li>length (in beats)</li>
|
|
|
|
<li>channel</li>
|
|
|
|
</ul>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p>
|
|
|
|
and the calculation may be based on the following properties:
|
|
|
|
</p>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-01-03 04:01:45 -05:00
|
|
|
<ul>
|
|
|
|
<li>this note's</li>
|
|
|
|
<li>the previous note's</li>
|
2017-11-15 09:34:10 -05:00
|
|
|
<li>this note's index (number of the note, i.e. the first one is 0, the second
|
|
|
|
is 1, etc.)</li>
|
2017-01-03 04:01:45 -05:00
|
|
|
<li>exactly (for a constant value, between 1 and 127)</li>
|
2017-11-15 09:34:10 -05:00
|
|
|
<li>a random number from <em>lower</em> to <em>higher</em> (<em>lower</em> and
|
|
|
|
<em>higher</em> beeing constant values between 1 and 127)</li>
|
|
|
|
<li>equal steps from <em>lower</em> to <em>higher</em> (<em>lower</em> and
|
|
|
|
<em>higher</em> beeing constant values between 1 and 127).</li>
|
2017-01-03 04:01:45 -05:00
|
|
|
</ul>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p>
|
|
|
|
The mathematical operators can be:
|
|
|
|
</p>
|
2017-01-04 09:32:00 -05:00
|
|
|
|
2017-01-03 04:01:45 -05:00
|
|
|
<ul>
|
|
|
|
<li>+ (addition)</li>
|
|
|
|
<li>- (substration)</li>
|
|
|
|
<li>* (multiplication)</li>
|
|
|
|
<li>/ (euclidian division)</li>
|
2017-11-15 09:34:10 -05:00
|
|
|
<li>mod (rest of the euclidian division).</li>
|
2017-01-03 04:01:45 -05:00
|
|
|
</ul>
|
|
|
|
|
2017-11-15 09:34:10 -05:00
|
|
|
<p class="note">
|
|
|
|
All these operations can be very handy, as long as ther is a mathematical way
|
|
|
|
to achieve the targeted goal. Beware though of odd "border cases": division by
|
|
|
|
zero (which does nothing), using the note's index and forgetting it starts at
|
|
|
|
0 and not 1, etc.
|
|
|
|
<p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Very interesting results can nevertheless be created, like humanizing
|
|
|
|
(randomizing the velocity, start time and duration of all the notes), creating
|
|
|
|
arpeggios, automating tedious tasks, transposing, etc.
|
|
|
|
</p>
|