Skip to content

Scheduling

Scheduling modules let you trigger events over time, synced to the Transport.

Loop

A Loop calls a callback at a regular interval.

1let loop = Loop.make(time => {
2 synth->Synth.triggerAttackRelease("C4", "8n")
3}, "4n")
4
5let loop2 = Loop.makeWithOptions({
6 callback: time => Console.log(time),
7 interval: "4n",
8 iterations: 8, // stop after 8 repeats
9 probability: 0.9, // 90% chance each iteration fires
10 humanize: true,
11})
12
13loop->Loop.start()
14loop->Loop.stop()
15loop->Loop.cancel()
16
17// Properties
18loop->Loop.state // "started" | "stopped"
19loop->Loop.progress // normalRange
20loop->Loop.interval // time
21loop->Loop.setInterval("8n")
22loop->Loop.playbackRate // positive
23loop->Loop.setPlaybackRate(2.0)
24loop->Loop.iterations // int
25loop->Loop.setIterations(16)
26loop->Loop.mute // bool
27loop->Loop.setMute(true)
28loop->Loop.humanize // bool
29loop->Loop.probability // normalRange

Event

An Event triggers a callback on a schedule. Similar to Loop but for single occurrences.

1let event = Event.make(time => {
2 synth->Synth.triggerAttackRelease("E4", "8n")
3})
4
5let event2 = Event.makeWithOptions({
6 callback: _time => Console.log("event!"),
7 loop: true,
8 loopStart: "0",
9 loopEnd: "2m",
10 playbackRate: 1.0,
11})
12
13event->Event.start("0")
14event->Event.stop("4m")
15event->Event.cancel()
16
17event->Event.state // playbackState
18event->Event.progress // normalRange
19event->Event.loop // bool
20event->Event.setLoop(true)
21event->Event.mute // bool
22event->Event.probability // normalRange

Part

A Part schedules an array of events along a timeline.

1// Each event has a time and a value
2let part = Part.make((time, note) => {
3 synth->Synth.triggerAttackRelease(note, "8n")
4}, [
5 {"time": "0:0:0", "note": "C4"},
6 {"time": "0:1:0", "note": "E4"},
7 {"time": "0:2:0", "note": "G4"},
8])
9
10part->Part.start("0")
11part->Part.stop()
12
13part->Part.loop // bool
14part->Part.setLoop(true)
15part->Part.loopStart // time
16part->Part.loopEnd // time
17part->Part.playbackRate // positive
18part->Part.length // int
19
20// Add/remove events
21part->Part.add("0:3:0", "B4")
22part->Part.remove("0:1:0", "E4")
23part->Part.clear()

Sequence

A Sequence plays an array of values at a given subdivision.

1let seq = Sequence.make((time, note) => {
2 synth->Synth.triggerAttackRelease(note, "8n")
3}, ["C4", "E4", "G4", "B4"], "4n")
4
5seq->Sequence.start("0")
6seq->Sequence.stop()
7
8seq->Sequence.loop // bool
9seq->Sequence.setLoop(true)
10seq->Sequence.subdivision // time
11seq->Sequence.events // array
12seq->Sequence.playbackRate // positive
Was this page helpful?