Live coding


Happy to announce that a generic MIDI version of gibberwocky is now available:

Runs in the browser (well, Chrome and Opera) and should talk with any MIDI hardware or DAWs; no plugins or closed-source software required. Please let me know if you have a chance to try it out! - Charlie


This just ended. I probably should have posted it before that. They are all recorded at least :slight_smile:


You can see all the various performances here:

And congrats to @cannc for debuting (at least I think it was the debut) a really cool new tool for composing/performing with Tidal as part of the event:


thanks @charlieroberts It’s still in pretty early stage :slight_smile: your gibber set was dope as heck too!


Belated welcome @charlieroberts ! I’m taking a look at gibberwocky now. Where’s the best place to ask questions if I hit snags? Should I start another thread here or is there someplace better?


Hi @ppqq. There’s a gibber mailing list where gibberwocky questions are most welcome:

… and there’s also a gibber channel on the live coding slack:

Looking forward to hearing what you think! - Charlie


Thanks for these pointers!

I was about to post a plea for help when I got things working. (Take-away: a quick video demonstrating setup would be super handy.) Anyway, I have some exploring to do but will chime in when I get somewhere.




gibberwocky.max is now available via the Max package manager. You can read a bit more about it on the Cycling '74 website, where there’s also a nice video tutorial / introduction that Graham made.


This is amazing! It worked on the first try with very minimal setup. The tutorials aren’t printing to the Max Console (MacOS with Max 7.3.4b), but that’s the only bug I’ve run into so far.


Nice, glad to hear it’s (mostly) working for you!

Hmmm… if you’re talking about the calls to Gibber.log() in the Patterns tutorial, those print to the console in the browser (make sure you’ve got the console open in the gibberwocky sidebar). But it’s a great idea to have them print in the Max console as well, as the gibberwocky console is often not open… I’ll have to look into that. - Charlie


i’m so excited about Gibberwocky in Max/M4L! all the videos are very engaging and i’m glad the response has been so warm on the c74 site. q: is there a way to trigger the M4L version at quantizations smaller than 1 bar?


Thanks! I’m not sure I’m understanding the question correctly, but sure, you can do whatever timing you want. 1/512th notes at 180 BPM shouldn’t be a problem.

All messages are requested one beat in advance. So, when beat one occurs in the global transport of Max:

  • Max sends a request to the browser client for any events that should happen during beat TWO
  • The client sends back all events for beat two; each event has a time offset defining when it should occur during the next beat
  • The time offsets are used to schedule the events using the MSP seq~ object, which provides sample-accurate scheduling.
  • On beat two, these new events are played back while the events for beat three are requested.

Hope this clarifies a bit on how the scheduling works. Because we request all events in advance, we avoid any slop due to network transport issues, so the timing should be really tight.

I did notice a problem where if I tried to run sequences before turning the audio on in Max scheduling was incorrect… a refresh in the browser fixed this situation. - Charlie


Ah yes that wasn’t a very clear question, though an excellent response! I just meant that it seems the M4L device is tied to run sequences on the 1, rather than being able to trigger a sequence on the 2, 3 or 4th beat of a bar.

e.g. if i execute a line of 1/512 notes, the sequencer seems to wait for the transport to hit beat 1 before playing the sequence. i was wondering if there was a way to tighten this so that i could change and trigger the code halfway through a bar, rather than wait for the 1 of the new bar.

I hope that’s a bit better?


Got it. Right now you have to schedule code execution at the start of the bar, unless you use the Score object.

However, there’s an optional fourth parameter to any .seq call that indicates provides additional delay (default 0) after code execution. So if we wanted a snare drum to hit on beats two and four:

devices[‘drums’].midinote.seq( 38, 1/2, 0, 1/4 )

Maybe that’s enough for what you want to do? Otherwise I guess we’d have to setup a bunch of keystrokes to enable execution on arbitrary beats… - Charlie


slightly unrelated from the context of your response, but this is such an exciting thing – to be able to manipulate code that’s typically hidden under the hood of Ableton is marvelous.

I think Score is going to be the way to go for now, anticipating the timing off the very helpful pulse animation. thanks so much for taking the time to respond!


Ack… one more that I forgot. Try running all of these simultaneously:

future( ()=> Gibber.log( ‘test 0’ ), 0 )
future( ()=> Gibber.log( ‘test 1/4’ ), 1/4 )
future( ()=> Gibber.log( ‘test 1/2’ ), 1/2 )
future( ()=> Gibber.log( ‘test 3/4’ ), 3/4 )

I need to document future() in the reference.

If there are further questions (which I’m most happy to answer!) maybe it’s worth starting a gibberwocky thread so this one doesn’t get taken over.

  • Charlie


I was having trouble with the first section of Tutorial 1: Basic Messaging. In particular, this section says it should appear on the Max console:

// Let's start by sending the following message 'synth1 1'. Connect the left
// most outlet of the gibberwocky object in Max to a print object, and then
// run the following three lines code and look at the console in Max:
synth1 = namespace('synth1') 
synth1( 1 )
synth1( 'test' )

The message doesn’t appear on either console for me. I have “Show All Messages” mode on for the Max Console.

The log you mention in the Patterns tutorial works perfectly for me. One note: the Max Console is mentioned specifically in tutorial 1, while in tutorial 4 the Gibber Console is simply called “the console”. Since this is the first time it is introduced in the tutorial, it would be helpful to distinguish the two more clearly for new users. I kept checking the Max Console in tutorial 4 before realizing that the Gibber Console existed.


Hmmm… that’s really strange. That should definitely work without any problems! And the other note / sequencing stuff is OK? You get the “gibberwocky is ready to burble.” message in the gibberwocky console? Are there any errors in the browser’s developer console?

Agreed about the need to differentiate “console” in the Patterns tutorial. And I still think it would be cool to just print to both consoles for any call to Gibber.log()…

Anyways, let me know if you learn anything else about this bug, I can’t figure out how this could be happening if other gibberwocky features work.


One more thing to try. If you run the following line of code:

Gibber.Communication.debug.output = true

… all messages that gibberwocky outputs will be printed to the client gibberwocky console. Can you tell me what it prints when you run the following?

s = namespace(‘s’)


I’ll reply to this on the new thread!