2020-07-29 17:19:40: a music sequencer, but for producing continuous gestures instead of discrete steps. have it be clocked with an external source so it can play well with others. perhaps build a notation system around it. #halfbakedideas
Gest (pronounced "jest") is a sequencer for gestures. Conceptually, it lies somewhere in between a classic step sequencer and an automation curve editor.
Timing in Gest is controlled via an external clock signal,
referred to as the
conductor signal. The conductor signal
is expected to be a
phasor: a periodic rising ramp signal
in range 0 and 1. Each period is considered as a musical
beat in time.
Once instantiated with a conductor signal, Gest can then
be configured to produce
gestures: audio-rate continuous
control signals intended to modulate synthesis parameters
(such as the frequency of an oscillator, or the cutoff of a
filter). Gestures are chunked into groups known as
phrases, which are blocked out to be a fixed duration
in units of beats.
A phrase, once created, will analyze the conductor signal
and resynthesize a new slower signal by a factor of N beats,
where N is the duration of the phrase. This will produce a
single ramp from 0 to 1 that extends the duration of the
phrase. This particular operation is known as a
This monoramp acts as a blank canvas for the phrase, and
can be equally divided up into an arbitrary number of
smaller ramps. This operation produces a
Contiguous ramp segments in a polyramp can be merged
together into monoramps, and then divided into new
polyramps. This process produces a tree of ramps, known
Every leaf node of a ramptree gets appended with a discrete
scalar value known as a
target. Using the normalized
continuous values from the ramp tree, targets can be
interpolated together to produce line segments. The way
which a target gets to the next target is known as a
A behavior can be any function that takes in an alpha value, and produce an output that involves two values A and B. It is typically assumed that behaviors try to be contiguous: when alpha is 0, the output should A. When alpha is 1, the output should be B.
Some examples of behaviors can include: linear, exponential, step, and smoothstep.
Code and Documentation
Code for Gest can be found on
In addition to the program itself, there is also a very concise that aims to introduce the concepts of Gest, using examples written in sndkit via the LIL scripting language. This can be found at gest_guide.
2021-07-22 12:09:28: wrote an initial notation system for composing gestures in (gest), loosely inspired by Tidal notation. It's currently implemented in scheme via (monolith). Feels promising.
2021-07-21 20:28:44: much debugging today in (gest), and what do I have to show for it? a melody that is a ripoff of rite of spring, being performed on a flat FM oscillator. baby steps in the right direction...
2021-07-20 21:02:59: ah. I sorta promised I wouldn't do it because (toys_not_tools), but I went and added exponential and bezier behavior to (gest). Now it does basically everything (libline) set out to do, but better. Goodbye libline, you were mighty in purpose and potential, but deeply flawed.
2021-07-17 12:30:06: guide pretty much written. things work well enough. migrating codebase to its own git repo. hoping to make an initial gest page for the (loom) soon, containing the program and the guide.
2021-07-15 18:36:40: new milestone in (gest): removed debug printf statements :)
2021-07-15 09:22:36: just merged all my test gestures together into one medley in (gest) and it is quite satisfying.
2021-07-14 22:25:33: some initial work on temporal weights in (gest). It's starting to tap into some (howyousay) energy. I already got my example working with two interpretations on how to shape the tempo flucations.
2021-07-14 16:13:44: I'm thinking about writing a supplemental literate program consisting the program wrapped in a sndkit node, as well as a set of sample programs. This would all be published at the (loom) eventually.
2021-07-14 16:12:35: things are actually working now in (gest). woo! even the initial test examples I've made are inspiring.
2021-07-13 11:29:01: yeah, error accumulation is going to be something I'll need to focus on. I just turned on my naive solution and of course it doesn't work.
2021-07-13 11:27:09: lots of progress with my implementation. An initial ramptree with polyramps and targets with lineaer behavior works mostly. I'm running into some timing issues now, so there may need to be some better checking of time.
2021-07-09 20:18:54: hoping to spend this weekend working on (gest). there's a lot to think about. words and some code have been written already these past two days.
2021-06-26 18:09:51: wrote some initial words down for what will be the gest program. slowly figuring out the implementation details.
2021-06-24 09:25:31: gave the (gest) page an initial overview. it's a pretty good distillation of the concepts I have so far.
2021-05-29 11:46:12: I haven't figured out a convenient way to notate these gestures. Some sort of DSL probably. That's going to require some thought.
2021-05-29 11:44:51: these ramps would then be used as variables in sequencing generators for various interpolation methods to get from point A to point B.
2021-05-29 11:43:24: I have been basically imagining gestures being constructed out of a hierarchy of ramp signals generated from a phasor clock source. N number of phasor periods makes a single base ramp, which can be further subdivided into smaller ramps, which can be further subdivided, and so on.
2021-05-29 11:39:58: well, not arbitrary precision. it's floating point. but for rhythmic subdivision in music with room for microtimings, it's practically abritrary precision.
2021-05-29 11:38:12: phasors are pretty awesome because they contain continuous time data. It's pretty trivial to subdivide a phasor, and even scale it too. It's also very easy to turn phasors into clock signals with arbitrary precision.
2021-05-29 11:34:55: I was stuck for a while thinking how one could synchronize line generators with clock signals. Then I realized you could have a clock signal be a phasor instead of a tick signal like metro.
2021-05-29 11:31:59: it has been several months since I updated this page, but I've been thinking about this project off and on.