Event Graphs

Event Graphs

A part of patchwerk, event graphs are a means of representing discrete temporal events. Discrete events are represented as nodes, and are connected to one another through time durations.

Event graphs are designed to be a balanced counter-part to the patchwerk audio graph.

Why the Graph?

In computer music, the graph (informally known as a "patch" in modular synth communities), is an extremly powerful structure for describing sound, and is the basis for patchwerk. It is incredibly useful tool for building complex self-evolving works that have seemingly organic feel to them.

The idea behind the event graph was to take this structure primarily used for representing signal flow, and apply it to events in time. The hope is that this structure would help in the realization of beautifully complex non-linear and probablistic macro structures in music.

What is an event?

An "event" is a generalized version of a note. A thing that happens at a discrete point in time.

When I first began really trying to use Sporth, I quickly found the design of the language incapable of seemingly simple things. I couldn't really play "marry had a little lamb" with it. It quickly became clear that beyond envelope generators and clocks, Sporth really didn't have a true concept of a "note", and that an interface would need to be on top of it. Cue Polysporth, and months of my life that I would never get back.

Okay, but why the event graph?

Because linear sequencing is boring. Or maybe it's just that I always end up with boring things with linear sequencing (somewhere there's an old soundcloud of mine that proves this).

It can be a very long tedious process to sequence something. When you are done, you get something that sounds exactly the same every time you play it.

One of the many things that fascinate me about working in modular environments is how the sounds grow and evolve with you as you are changing it. Graphs can get so complex that one tiny change ends up completly transforming the entire character of the piece. It is a much more rewarding + organic process than anything that can be done in a skeumorphic DAW.

Event Node Concepts

Delta Cables

Imagine each "event" as being a node. Every event node points to another event node. Each event node has a "tail", known as a delta cale, which says how long to way until going to the next event node. The event duration are in whole-integer time units, as the event graph uses an audio-rate clock signal.

A delta-cable that has a delta time of 0 will immediatly go to the next node. Stacking zero-duration nodes up allows multiple events to occur at a single point.

Terminal Nodes

An event node that points to a null value is considered to be a terminal node, meaning the event graph will go to a halt.

Switch Nodes

When called, a switch node will alternate between two event nodes before returning the next event node. If the next event node is itself, it will simply alternate between two event nodes.

Cointoss Nodes

Like the switch node, except that the node will randomly choose either of nodes.

Parametric Switch

A parametric switch is an event switch whose output can be controlled by an external value, presumably and audio-rate patchwerk cable.

Triplet Nodes

Like a switch, except with a group of three nodes.

Triptoss

Like a cointoss, but with three.

Delta Modifier

An event node that can change the delta cable of another event node.

Chain

A "chain" is a linear sequence of events, one after the other.

Loop

A loop is a sequence of events whose last event(s) return or partially return to a defined top node.

Walker

A walker is the thing that actually steps through an event graph, given a starting node.

Walker List

A walker list is a list of one or more walkers that are run at the same time. Multiple walkers are ideal for polyrhythmic or contrapuntal lines.

Metawalker

A metawalker is a walker list embedded inside of an event node. This is highly ideal for more complex sequences where a variable number of concurrent walkers are needed at any given point in time.