Continuing the discussion from Live coding:
Just wanted to house all nitty gritty Gibberwocky gab in one spot!
Continuing the discussion from Live coding:
Just wanted to house all nitty gritty Gibberwocky gab in one spot!
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!
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.
@charlieroberts brilliant work! the integration of visual feedback into the scripting is such a smart breakthrough.
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
@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 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.
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
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.
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.
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ā¦
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.
@_mark Thatās beautiful!!! Thanks so much for sharing, I really enjoyed the sounds you created.
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!
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.
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!