manual/include/transforming-midi---mathematical-operations.html
2017-11-15 15:34:10 +01:00

98 lines
3.0 KiB
HTML

<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">&gt;<em>name_of_the_region</em> &gt; MIDI
&gt; Transform&hellip;</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>
<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>
<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>
<p>
The properties that can be computed are:
</p>
<ul>
<li>note number (eg C2 is note number 24, C#2 is 25 and <a href="@@midi-notes-ref">so on</a>)</li>
<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>
<p>
and the calculation may be based on the following properties:
</p>
<ul>
<li>this note's</li>
<li>the previous note's</li>
<li>this note's index (number of the note, i.e. the first one is 0, the second
is 1, etc.)</li>
<li>exactly (for a constant value, between 1 and 127)</li>
<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>
</ul>
<p>
The mathematical operators can be:
</p>
<ul>
<li>+ (addition)</li>
<li>- (substration)</li>
<li>* (multiplication)</li>
<li>/ (euclidian division)</li>
<li>mod (rest of the euclidian division).</li>
</ul>
<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>