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")45let loop2 = Loop.makeWithOptions({6 callback: time => Console.log(time),7 interval: "4n",8 iterations: 8, // stop after 8 repeats9 probability: 0.9, // 90% chance each iteration fires10 humanize: true,11})1213loop->Loop.start()14loop->Loop.stop()15loop->Loop.cancel()1617// Properties18loop->Loop.state // "started" | "stopped"19loop->Loop.progress // normalRange20loop->Loop.interval // time21loop->Loop.setInterval("8n")22loop->Loop.playbackRate // positive23loop->Loop.setPlaybackRate(2.0)24loop->Loop.iterations // int25loop->Loop.setIterations(16)26loop->Loop.mute // bool27loop->Loop.setMute(true)28loop->Loop.humanize // bool29loop->Loop.probability // normalRangeEvent
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})45let event2 = Event.makeWithOptions({6 callback: _time => Console.log("event!"),7 loop: true,8 loopStart: "0",9 loopEnd: "2m",10 playbackRate: 1.0,11})1213event->Event.start("0")14event->Event.stop("4m")15event->Event.cancel()1617event->Event.state // playbackState18event->Event.progress // normalRange19event->Event.loop // bool20event->Event.setLoop(true)21event->Event.mute // bool22event->Event.probability // normalRangePart
A Part schedules an array of events along a timeline.
1// Each event has a time and a value2let 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])910part->Part.start("0")11part->Part.stop()1213part->Part.loop // bool14part->Part.setLoop(true)15part->Part.loopStart // time16part->Part.loopEnd // time17part->Part.playbackRate // positive18part->Part.length // int1920// Add/remove events21part->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")45seq->Sequence.start("0")6seq->Sequence.stop()78seq->Sequence.loop // bool9seq->Sequence.setLoop(true)10seq->Sequence.subdivision // time11seq->Sequence.events // array12seq->Sequence.playbackRate // positive