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, D2) will produce a phasor at half speed. A value of 3/1 (N3, D1) 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