tur/timing
BeatClock
(defstruct BeatClock [])
tracks beat time from a running sample counter.
make-beat-clock
(make-beat-clock [bpm sample-rate])
create a new beat clock at the given BPM and sample rate.
| bpm | beats per minute | |
| sample-rate | audio sample rate in Hz |
BeatClock starting at sample 0. (make-beat-clock 120.0 48000.0)
clock->beats
(clock->beats [clock sample-offset])
convert a sample offset to beats.
| clock | BeatClock | |
| sample-offset | sample count from clock start |
Beats value.
clock->samples
(clock->samples [clock beats])
convert a beat offset to samples.
| clock | BeatClock | |
| beats | beat count from clock start |
Sample count.
clock-advance
(clock-advance [clock samples])
advance the clock by a number of samples.
| clock | BeatClock to advance | |
| samples | number of samples to advance |
Updated BeatClock.
clock-now
(clock-now [clock])
get the current beat time from a clock.
| clock | BeatClock |
Current beat time as a float.
ScheduledEvent
(defstruct ScheduledEvent [])
an event queued for future execution at a specific beat.
EventQueue
(defstruct EventQueue [])
ordered queue of scheduled events.
queue-new
(queue-new)
create an empty event queue.
Empty EventQueue.
queue-push
(queue-push [queue event])
add an event to an event queue.
| queue | EventQueue to add to | |
| event | ScheduledEvent to enqueue |
Updated EventQueue.
queue-pop
(queue-pop [queue])
remove and return the earliest event from the queue.
| queue | EventQueue |
ScheduledEvent or nil if the queue is empty.
queue-peek
(queue-peek [queue])
look at the earliest event without removing it.
| queue | EventQueue |
ScheduledEvent or nil if the queue is empty.
PatternScheduler
(defstruct PatternScheduler [])
scheduler combining a beat clock with an event queue.
scheduler-new
(scheduler-new [clock])
create a new pattern scheduler.
| clock | BeatClock to drive the scheduler |
PatternScheduler with empty queues.
schedule-pattern
(schedule-pattern [sched pattern at-beat callback])
schedule a pattern to be evaluated at a specific beat.
| sched | PatternScheduler | |
| pattern | pattern to evaluate when triggered | |
| at-beat | beat time to trigger | |
| callback | function called with the pattern result |
Event ID.
schedule-param
(schedule-param [sched node-id pattern at-beat])
schedule a synth parameter update at a specific beat.
| sched | PatternScheduler | |
| node-id | synth node ID to update | |
| pattern | pattern to evaluate | |
| at-beat | beat time to update |
Event ID.
process-events
(process-events [sched current-beat])
fire all events due at or before current-beat.
| sched | PatternScheduler | |
| current-beat | current beat time |
Number of events processed.
process-samples
(process-samples [sched samples])
advance the clock by samples and fire due events.
| sched | PatternScheduler | |
| samples | number of samples to advance |
Number of events processed.
audio-pattern
(audio-pattern [p clock])
wrap a pattern for audio-rate evaluation using sample offsets.
| p | NumPattern to evaluate | |
| clock | BeatClock for timing |
Function: Samples -> float that evaluates p at the corresponding beat.
mix-audio-patterns
(mix-audio-patterns [& patterns])
mix multiple audio-rate patterns by summation.
| patterns | list of audio-rate functions (Samples -> float) |
Function: Samples -> float returning the sum of all patterns.
audio-pattern-block
(audio-pattern-block [p clock block-size])
render a block of audio from a pattern.
| p | NumPattern | |
| clock | BeatClock | |
| block-size | number of samples per block |
Function: (output-buffer, sample-offset) -> void writing block-size samples.
SampleAccuratePattern
(defstruct SampleAccuratePattern [])
pattern with sample-accurate timing state.
make-sample-accurate
(make-sample-accurate [p clock])
wrap a pattern for sample-accurate evaluation.
| p | pattern to wrap | |
| clock | BeatClock |
SampleAccuratePattern.
sap-eval
(sap-eval [sap sample-offset])
evaluate a sample-accurate pattern at a sample offset.
| sap | SampleAccuratePattern | |
| sample-offset | sample position to evaluate at |
Pattern value at the corresponding beat.
sap-update
(sap-update [sap new-sample])
advance a sample-accurate pattern to a new sample position.
| sap | SampleAccuratePattern | |
| new-sample | new sample position |
Updated SampleAccuratePattern with cached last value.
samples->beats
(samples->beats [samples bpm sample-rate])
convert sample count to beats.
| samples | sample count | |
| bpm | tempo in BPM | |
| sample-rate | audio sample rate |
Beat time.
beats->samples
(beats->samples [beats bpm sample-rate])
convert beat time to sample count.
| beats | beat time | |
| bpm | tempo in BPM | |
| sample-rate | audio sample rate |
Sample count.
TempoTracker
(defstruct TempoTracker [])
tracks beat time across multiple tempo changes.
tempo-tracker-new
(tempo-tracker-new [bpm sample-rate])
create a new tempo tracker at a constant initial BPM.
| bpm | initial BPM | |
| sample-rate | audio sample rate |
TempoTracker with no tempo changes.
tempo-change
(tempo-change [tracker at-sample new-bpm])
record a tempo change at a specific sample position.
| tracker | TempoTracker | |
| at-sample | sample position of the tempo change | |
| new-bpm | new BPM after the change |
Updated TempoTracker.
tempo-at
(tempo-at [tracker sample])
query the BPM at a specific sample position.
| tracker | TempoTracker | |
| sample | sample position to query |
BPM at that sample.
beats-at
(beats-at [tracker sample])
compute beat time at a sample accounting for tempo changes.
| tracker | TempoTracker | |
| sample | sample position to query |
Beat time at that sample.
schedule-at-sample
(schedule-at-sample [sched at-sample callback])
schedule a callback to fire at a specific sample position.
| sched | PatternScheduler | |
| at-sample | sample position to trigger | |
| callback | function to call |
Event ID.
schedule-pattern-at-sample
(schedule-pattern-at-sample [sched at-sample pattern callback])
schedule a pattern evaluation at a sample position.
| sched | PatternScheduler | |
| at-sample | sample position to trigger | |
| pattern | pattern to evaluate | |
| callback | function called with the result |
Event ID.