3. Signal Flow
3.1. Overview
GestVM can be imagined as a DSP algorithm whose state is controlled via a virtual machine that gets periodically evaluated. Understanding the signal flow is the recommended way to understand the system.
GestVM can be broken up into components, which will be presented in flow order going from the inputs to the outputs.
Examined as a unit generator, GestVM takes in one input
signal, known as a conductor
, and produces one output
signal, known as a gesture
.
3.2. Temporal Weight (pre-input)
The tempo of the timing signal can be optionally
influenced by the system it is controlling in a mechanism
called temporal weight
.
Temporal weight is the means for adding tempo flucuations. In a typical DAW, tempo is controlled via a tempo automation track. This will cause the length of notes to vary depending region you drop them in. Temporal weight reverses this relationship. It is instead the notes themselves that can influence the tempo rather than the other way around.
Temporal weight has two parameters: mass and inertia. As mass increases, overall tempo increases and things become faster. As mass decreases, overal tempo decreases and things become slower. Inertia sets how quickly the sytem will react to changes.
3.3. Conductor (input signal)
The Conductor is a specialized timing signal used to control the gesture. It is expected to be a periodic rising ramp normalized to be in range 0 to 1. Ideally, wraparound should be truncated.
This is generated externally and not managed by GestVM. The advantage of this is that this signal can be used to control other things in a system, thus keeping things synchronized.
3.4. Temporal Skewer
Temporal skewing is a process that allows a section beats produced by the conductor to be warped locally without adding or removing any overall time.
Skewing works by putting the conductor ramp through a process that makes it proportionally slower, putting that through some kind of slope function, then speeding it up again.
Skewing has two main parameters: the skewing behavior type (such as bypass, exponential positive, exponential negative), and the duration (positive integer, minimum 1).
3.5. Main Rephasor
Placed after the Skewer, the Rephasor is the component in charge of taking the input conductor signal and proportionally changing the tempo.
The rephasor is parametrically controlled with 2 values: a
numerator, and a denominator (positive integer values, at
least 1).
These produce a fraction which
set the scaling amount for the rephasor. A value of 1/2
(N1, D
2) will produce a phasor at half speed. A value of
3/1 (N3, D
1) will produce a phasor three times as fast.
3.6. Virtual Machine
The Virtual Machine
is placed after the Rephasor, and is
responsible for manipulating the state of the gesture
synthesizer. Every time the Rephasor resets back to 0, it
will make a call to the underlying machine, which will run
until it reaches a breakpoint statement BRK
.
3.7. Interpolator (output)
The interpolator
takes in a rephasor as input, and uses it
to interplate between two values, the current value, and the
next value. Current value is set implicitly. The VM only
is able to set the next value. Every time the VM evaluates,
the existing next value is stored as the current value.
The way the value is interpolated is known as
the behavior
. Behaviors can include: linear, step,
exponential, etc. The interpolator can also be configured
to return things like the phasor signal itself, which allows
the gesture to be used for more articulation and envelope
purposes.
Interpolator has 2 commands: set up the next value, and the behavior.
prev | home | next