Metanodes implemented in my gesture synthesizer!

It's hard to explain what metanodes are out of context, but this little sequenced melody performed on an FM oscillator showcases a little bit of what is possible.

The sequenced melody can be represented in this pseudo-lilypond notation:

||: c4 g d' | c d8 e d'4 :||

Metanodes allow one to swap out chunks within a phrase. Here's some more pseudo-notation using s-expressions that represent how Gest is sequencing it:

||: c4 (@ (g4) (d8 e)) d'4 :||

The metanode (@) here cycles between the two melodic fragments here every time it repeats.

· · Web · 2 · 0 · 1

If you're listening to this, you may be hearing slides, slurs, and glissandos that aren't being accounted for in the lilypond notation.

In Gest, these articulations are all explicitly and precisely defined.

The actual gesture producing the notes here can be fully and unambiguously defined using the following notation (not pseudo-code, this actually works):

beg 3 3
t 0 sg
mn 1 2 t 7 sg pr 2 t 2 sg t 4 gl
t 14 mg
end loop fin

So, to date, there are now metanodes, metatargets, and metabehaviors. All structures that can be used to change looped gestures during a performance.

At the moment, these all just change stuff sequentially, but it would be trivial to make the choices be randomized instead. This would lend itself very well to generative music.

Slightly more non-trivial things I am thinking about are metaphrases (one level up from a metanode), and metavalues (mainly wanted to add randomization to values to do things like add humanization to pitch signals).

@paul I think in Tidal's pattern mini-notation this example would be written like this:

"c4 <g4 [d8 e]> d'4"

I tried (s "bd <lt [cp sd]> ht") in MiniTidal in Estuary web environment and it seemed to have the same rhythm as yours.

Just to give more examples of notating patterns.

@mathr thanks for the links! I wasn't aware of miniTidal, but it seems like something I should study. I've been meaning to come up with a DSL for gesture sequences, terse enough for live coding. At the moment, all I have is a mini language with a 1:1 correspondence with the C commands used to populate it. It's okay I guess, but I feel like it could be more expressive.

Sign in to participate in the conversation

Welcome to, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.