Temporal Variables

Starting version 0.8, Antescofo provides a feature to track the progression of any kind of performance P through the updates to a variable. The variable is used to infer the tempo of P and any sequence of actions can be synchronized with it, the same way a sequence of actions can be synchronized with the musician.

Such variables are called temporal variables. They abstract the “position” and the “speed” of P: each time P progress, it updates the associated variable, which corresponds to a predefined progression in the position of P. The “tempo of the variable” is computed using the same algorithm used by the listening machine to track the tempo of the musician.

Temporal variables are declared using the @tempovar declaration:

          @tempovar $v(60, 1/2),  $w(45, 1) 

defines two variables $v and $w. Variable $v has an initial tempo of 60 BPM and periodic updates of 1/2 beats, whereas $w has an initial tempo of 45 BPM and expected periodic updates of 1.0 beat.

Temporal variables are regular variables that can be used in expressions. The value of a temporal variable is the last assigned value or undefined (as for an ordinary variable). In addition, a temporal variable stores the following internal information that can be accessed at any time:

  • $v.tempo represents the internal tempo of $v as tracked by Large's algorithm. This attribute is initialized by the first parameter of the @tempovar declaration.

  • $v.position represents current beat position of $v. This attribute is initialized to 0.

  • $v.frequency represents frequency (period) of $v. This attribute is initialized by the inverse of the second parameter of the @tempovar declaration.

  • $v.rnow represents relative time of $v

Such internal attributes can be changed at any time like regular variables. For example:

            let $v.tempo := 55  // change the current tempo of $v

The @sync synchronization attribute

Using temporal variables, it is possible to define synchronization strategies of groups, loops, proc, etc., based on the progression recorded by a temporal variable, using the attribute @sync as below:

        @sync $v  
                ; actions...

Temporal variables can be set by the environment, cf. setvar, allowing for easy tracking any kind of external processes and the synchronization on it. Temporal variables can also be used to set synchronization coordination schemes different than that of the human musician it follows.

Comparing score following and temporal variables

The table below compares the features offered by the score following (listening machine) and temporal variables:

features score following temporal variable $v
event musical event detected by the listening machine update of $v
elementary progression an amount corresponding to the duration of the detected event a fixed amount specified in the @tempovar declaration
position of last event $BEAT_POS $v.position
current position $RNOW $v.RNOW
progression speed $RT_TEMPO $v.tempo
progression speed estimation by Large's algorithm Large's algorithm
position is updatable NO YES
progression speed is updatable NO YES

Nota Bene:

  • The value assigned to a temporal variable does not matter in the synchronization mechanism, nor in the position and progression speed tracking.

  • Unlike a score, each event (update) of a temporal variable corresponds to a progression of the same quantity.

  • Contrary to score following, the tracking parameter can be updated directly, directly impacting the progression of the sequence of actions synchronized with it.