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:
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?
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.
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.
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!
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.