Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

orx-time-operators

A collection of time-sensitive functions aimed at controlling raw data over-time, such as Envelope and LFO.

For more detailed information, read: An introduction to orx-time-operators

Usage

Use the TimeOperators extension to tick the operators, making them advance in time.

extend(TimeOperators()) {
    track(envelope, lfo)
}

Envelope

An Attack/Decay based envelope which takes into account the elapsed time to change a given value over time. It runs through two phases, Attack and Decay which can be changed to shape the output values.

val size = Envelope(50.0, 400.0, 0.5, 0.5)

if (frameCount % 80 == 0) {
    size.trigger() // also accepts a new target value
}

drawer.circle(0.0, 0.0, size.value)

LFO

Generates oscillating waves between [0.0, 1.0] tied to the frame rate.

val size = LFO(LFOWave.Sine) // default LFOWave.Saw

val freq = 0.5
val phase = 0.5

drawer.circle(0.0, 0.0, size.sample(freq, phase))

// or

drawer.circle(0.0, 0.0, size.sine(freq, phase))

Demos

DemoEnvelope

Demonstrates the use of an Attack/Decay Envelope to control the size and rotation of a rectangle.

The size envelope is triggered every 1.3 seconds, and the rotation one every 0.8 seconds.

DemoEnvelopeKt

source code

DemoLFO

This demo uses LFO() to produce two cyclic animations. The first one generates a sawtooth and controls the size of a rectangle. The second one uses a sine wave to control the rotation.

When sampling the LFO one can specify the frequency and phase, which makes it possible to use the same LFO to produce animations with various loop durations.

DemoLFOKt

source code