Skip to content
Graham Wakefield edited this page Apr 25, 2019 · 38 revisions

What is Gibberwocky for Max?

A quick way to augment a Max patcher with live coded sequencing & modulations. Live coding happens in a browser-based text editor, following similar idioms as in the widely-used Gibber environment. Modulations can be messages, UI knob tweaks, and even arbitrary signal graphs.

Installing

Open Max's Package Manager, find & install the gibberwocky package

Alternatively, download/checkout https://github.com/gibber-cc/gibberwocky.max into Documents/Max 8/Packages (or My Documents/Max 8/Packages on windows)

Make sure you have a recent version of Chrome (or Firefox or Safari (or maybe even Edge now)).

Using Gibberwocky

Add a [gibberwocky] object to your Max patcher. Turn on audio in the patcher, if it isn't already on.

Send the [gibberwocky] object a bang to open the editor (alternatively, just open http://gibberwocky.cc/burble in your browser). In the editor's console, if it says "gibberwocky.max is ready to burble", you're all set!

Note: You might need to open port 8081 on your firewall.

What can Gibberwocky modulate?

Gibberwocky -> Max

  • message => messages/lists from [gibberwocky] 1st outlet
  • param => messages to UI objects with scripting names
  • device => messages to device objects (including sending midinotes and setting parameters)
  • signal => audio outlets of [gibberwocky]

Message

message("hello")("world")

...will send the message hello world out of the gibberwocky 1st outlet. So will:

message("hello.world")    

A message path of this kind can also be stored as an callable object, for re-use:

hello = message("hello")
hello("world")

Param

Device

parameters

// alternate filter cutoff between 100Hz and 10kHz every beat:
devices['synth']['cutoff'].seq([100, 10000], 1/4)

midinote

// midi note number:
devices['synth'].midinote( 60 )  
// midi note number, midi velocity, duration in ms:
devices['synth'].midinote( 60, 120, 1000 )  

Note, velocity, and duration can all be sequenced independently:

devices['bass'].midinote.seq( 60, 1/2 )
devices['bass'].velocity.seq( [16, 64, 127], 1/2 )
devices['bass'].duration.seq( [10, 100,500], 1/2 )

Signal

Sequencing

Euclid

You can also specify Euclidean rhythms using the Euclid() function, which returns a pattern:

devices['drums'].midinote.seq( 36, Euclid(5,8) )

Euclidean rhythms are specifcations of rhythm using a number of pulses allocated over a number of beats. The algorithm attempts to distribute the pulses as evenly as possible over all beats while maintaining a grid. Examples of these distributions are given below (where 'x' represents a pulse and '.' represents a rest):

1,4 : x...
2,3 : x.x
2,5 : x.x..
3,5 : x.x.x
3,8 : x..x..x.
5,8 : x.xx.xx. 
4,9 : x.x.x.x..
5,9 : x.x.x.x.x

As in Gibber, by default the number of beats chosen also determines the time used by each beat; selecting '5,8' means 5 pulses spread across 8 1/8 notes. However, you can also specify a different temporal resolution for the resulting pattern: '5,8,1/16' means 5 pulses spread across 8 beats where each beat is a 1/16th note.

You can read a paper describing Euclidean rhythms here: http://archive.bridgesmathart.org/2005/bridges2005-47.pdf

Clone this wiki locally