Gibberwocky

Continuing the discussion from Live coding:

Just wanted to house all nitty gritty Gibberwocky gab in one spot!

10 Likes

relevant links:
Max Package info
M4L device GitHub

4 Likes

Yay!

I’m excited to give gibberwocky another whirl. Congrats on the release @charlieroberts!

Quick question. I took a quick skim over the docs and didn’t see any mention but I could be missing it. I’m curious how applicable gibberwocky would be for some recording automation. For example, could you script something like:

create a new instrument track, assign it an input, arm it, and start recording?

Assuming it’s not there already, do you know if the underlying Live APIs would support this kind of thing? (Looking at some of the control surface scripting, I assume so but I haven’t dug in at all.)

Thanks in advance, and again kudos on the release! :tada:

Thanks for starting the new thread, @dan_derks!

@ppqq I -really- wish we could perform those types of tasks, but the Max for Live API doesn’t enable them. That said, I’ve talked with a few Ableton developers about this, so, who knows? Maybe at some point in the future it will be possible. I would love that, as it’d free me up to be more improvisatory with gibberwocky if I didn’t have to instantiate all my tracks / instruments / fx ahead of time.

The undocumented Python API does support making tracks / instruments (that’s how Push does it) but it doesn’t support the same timing accuracy that the Max for Live plugin does (at least to my understanding), and it of course doesn’t have support for adding the Gen modulations. Plus, of course, the Max for Live API is formally supported. In the end, the Gen modulations wound up being a huge part of this project (at least for me), so I’m glad we went with M4L.

2 Likes

@charlieroberts brilliant work! the integration of visual feedback into the scripting is such a smart breakthrough.

5 Likes

Thanks for following up. It’d be great if this was more first class would allow for a lot of interesting automations (for general workflow improvement and algorithmic composition besides). In the meantime,

could you give me a pointer? Maybe I can just call out to a script in the short-term. For my immediate purposes I can live with a little lag so unless the latency is super bad I may be able to wing it.

Thanks!

@charlieroberts Moving the console bug discussion here from the other thread…

No other errors on the console. Sequencing is tight and works perfectly. I get the ā€œready to burbleā€ message as well. I’m on the beta for Max 7.3.4, so I’ll update to the new release candidate. I can’t imagine that a minor update will have interfered, but I could be wrong there. I’ll also test it on my Windows machine.

Nice to see MAT kicking so much butt these days :slight_smile:

@tehn thanks so much! The idea of revealing pattern state in the source code was borrowed from Thor Magnusson’s ixi lang environment; everything else (phase annotations / sparklines / code comments for displaying function output etc.) came from riffing off that original concept.

@ppqq I don’t have any experience with the Python API myself; this is only what I hear from talking to folks from Ableton. This thread seems like it has a nice summary of the relevant info though: Grids + Display + Buttons + Encoders to control Ableton Live

@trickyflemming I just don’t get it :frowning: Did you have a chance to try the code from my last post in the live coding thread? I’m curious to see what gets printed to the console… or are you saying that you tried it and nothing printed? I agree that the beta doesn’t seem like it would interfere with this.

2 Likes

Thanks!

Looking at http://julienbayle.net/PythonLiveAPI_documentation/Live9.1.xml, I see

  • Live.Song.Song.create_audio_track()
  • Live.Track.Track.current_input_routing
  • Live.Track.Track.arm
  • … etc.

which are tantalizing. If I ever get around to playing with this, I’ll report back with a fresh thread. If anyone wants to nudge me with more ideas, drop me a line.

:beers:

Hmmmm… I’m assuming you have the help patch open at the same time? At the moment I guess you can only have one gibberwocky instance open without running into this problem… I thought we solved this problem at some point but apparently not.

Anyways, in the short term, does closing the help patch fix this problem?

interested in seeing/hearing things people are doing with Gibberwocky. I just started using it myself with atom and in combination with clyphx I have this total control over the DAW through code that I’m really enjoying.

2 Likes

I’ve been using it a bit to control Max and the modular via ES8. A lot of fun.

Will post a video once I get the setup right…

2 Likes

Her’s a work in progress video showing how I’ve been using Gibberwocky with Max. I’ve recorded a set of stems from the modular, focusing on these ambient sounds that are harmonically quite static but have lots of rhythmic fluctuation in them. Lots of Three Sisters in formant mode. The patch shown sequences these as a set of tape loops.

This is my first patch with Gibberwocky in control - so there’s nothing super complex going on, just some slow changes to UI objects, lots of randomisation for a more generative approach. It definitely feels useful to not have to build these things in Max though and have all the sequencing in one place.

Additionally there is some control of my modular through an ES8, with sync going to an Echophon and varying levels of voltage to Impulse Drive. Here’s a shot of the modular patch:

And the Max patch:

All the players are top left, some filtering and envelope shaping top right, LFOs to impulse drive centre right, function generators middle left then returns from the modular and effects bottom right.

Planning on doing a set of these.

8 Likes

@_mark That’s beautiful!!! Thanks so much for sharing, I really enjoyed the sounds you created.

1 Like

What the best practices for saving Gibberwocky scripts within Max patches?
And is there an automated way to reload them?

If not do people just save them as text files outside of the patch (or maybe inside via a comment or something?) and manually reload them?

Also, I’m brand new to the language and I’ve got my first patch hooked up and communicating. I’m trying to make values smoothly transition using .seq instead of jump though. The line documentation is hurting my head a bit. I tried to modify the example but it’s still jumping the ratio message and not interpolating it. Any ideas?

l = line( 4, 2.9, 3.1 )
message( 'ratio' ).seq(l, 2  )

l.start.seq( [2,3.8,4], 2 )
l.period.seq( [1/2,1],1 )

Thank you.

If you’re using https://gibberwocky.cc/burble as the editor, you can use Ctrl+Shift+S to save your current file and then Ctrl+Shift+L to load this. This is only for a single script, so I use it to save functions / values that I might want to use across multiple gibberwocky sessions… ā€œsetting the stageā€ if you will. Otherwise, yes, unfortunately I just save by copying/pasting into a text editor. There might be some improvements to that coming this summer.

In regards to the line example you posted, it should sample the line every two measures, changing the start/period at various other times. Is the problem that this isn’t the behavior you see, or is that it’s not the behavior you were expecting?

Thanks for trying gibberwocky out!

1 Like

Thanks @charlieroberts.

Essentially I’d like the simplest way possible to do something like this:
message( 'ratio' ).seq( [2.9,3.1], 2 )
But have the values slowly move from 2.9 to 3.1 (for instance) over the course of 2 measures instead of jumping every 2 measures.

And got it re: the editor. Do you save them in an external editor? Or do you save them in Max somehow And speaking of, is it possible to use a code editor instead of https://gibberwocky.cc/burble ?

Cheers!
Ben

It would be nice if there was some concept of control rate in the Max version of gibberwocky, but I don’t think it currently exists. So, you can either use line to make a gen~ expression in [gibberwocky] and sample it in Max (see the ā€œmodulating with gen~ tutorialā€), or you can just sequence using your line object at a much faster rate. For example, this should sent an interpolated ā€˜ratio’ message every 1/128th note, the line has a period of two measures:

l = line( 2, 2.9, 3.1 )
message( 'ratio' ).seq( l, 1/128  )

I don’t have a way to save sketches in Max currently, I just use an external editor. An Atom plugin was made a while back, but I think the project would need to be updated to work correctly (https://github.com/wichniowski/atom-gibberwocky). Hope to make some progress on better editor support this summer.

1 Like

Thanks again @charlieroberts. I’ll check out that ~gen tutorial.

So essentially I wasn’t sampling the line enough? I’d still have to do this full code to step through values in the line, correct?

l = line( 4, 2, 3.5 )
message( 'ratio' ).seq( l, 1/128  )
l.start.seq( [2,3.8,4], 2 )
l.period.seq( [2,3,4],2 )

I realized that because this is all within Max I can very easily achieve what I’m looking for by slewing in Max after receiving the stepped values from Gibberwocky. I’d ideally like to understand the language better but it works for now this way as well. Thanks.

Yeah, just applying some type of slewing / lowpass on the stepped signal should work well!

Here’s what should be happening the way you have the code now:

// create a line/ramp/phasor/sawtooth traveling from 2 to 3.5 over four measures
l = line( 4, 2, 3.5 )
// sample the line object each 1/128 note and send the result out the left [gibberwocky] outlet
// output with the prefix 'ratio'
message( 'ratio' ).seq( l, 1/128  )
// every two measures, change the minimum/start value of the line
// note: I have no idea what happens when the start value is greater than the end value in line() !
l.start.seq( [2,3.8,4], 2 )
// every two measures, change the period of the line
l.period.seq( [2,3,4],2 )

Hope that’s helpful!

2 Likes