Beginner but well versed in Max/MSP - which Uzu to choose?

Hi there, I use Max/MSP for algorithmic music a lot, and I’ve always wanted to go a bit deeper into live coding. I know most of the concepts of Tidal but never really embraced it. I use almost only VSTs or external instruments. Is Tidal or Strudel the better choice if I plan on using it almost exclusively to trigger MIDI (most likely VSTs inside Ableton)?

Also, my music often uses irregular time signatures (most commonly changing cycle sizes while keeping the same tempo), any specific tips for dealing with that in the world of “cycle-centric” Uzu languages?

Thanks in advance!

I just use Strudel, not Tidal, so I can’t weigh on the “which one to choose”, but I can give some Strudel details:

There’s some info on how to setup midi in/midi out with strudel in MIDI, OSC & MQTT 🌀 Strudel this is interactive and you can try out right away if that works for you.

strudel has a way to set the cycles per minute dynamically, but it can get buggy if you cange your bpm/cycles per minute frequently (in particular, if you get faster, the start of your first note after getting faster is in the past and will not be played).

If you keep your bpm constant but just want to change the time signatures, a “one quarter note per cycle” approach would be agnostic to your time signature. (or 8th notes)

1 Like

Strudel’s midi isn’t very accurate, so if MIDI output is your goal I’d either go with Tidal, or use Strudel with SuperDirt, and send MIDI via that.

1 Like

Thanks for the kind answers!

@yaxu If I manage to set up some OSC bridge to Ableton and use it instead of MIDI, would it still make a difference if I use Tidal or Strudel, especially under heavy load (i. e. lots of fast notes)?

and

@scrappy_fiddler would you mind detailing how this would work? I understand this would be for instance having a cycle in 1/4 instead of, say, 4/4, right? I wanted in practice to be able to change the length of the pattern at the same tempo, so for instance:

xx..x.x…xxx

xx..x

xx..x.x…x

where the duration of each x or . would be the same

For example you could do this:

setcps(120/60)
  
$: `<
bd sd bd sd  
bd sd bd sd
bd hh hh
bd sd bd sd
oh
bd sd bd sd
>`.s()

the 1st 4 cycles are one bar of 4/4ths, the 2nd 4 cycles are as well

then the 3 cycles are 1 bar of 3/4ths

then we are back to 4 cycles for 1 bar of 4/4ths

the lone oh is 1/4th (but of course you can subdivide it with square brackets)

then we are back to 4/4ths

and one bar of 3/4ths again.

I think you’re missing some square brackets or something there?

no, this is intentionally 1 cycle = 1 quarter note, in contrast to the convention of 1 cycle = 1 bar (whose length would be dependant on time signature).

For my example, the bars are virtually separated by the line break, but there is no actual structure for this.

Square brackets would be needed if one wanted 8th notes, of which I included none in my example. you could do square brackets with [...]/4@4 for 4/4ths and [...]/3@3 for 3/4ths and so on to give it a bit more visual structure (and work better with pick)

Note my cps of 2 which translates to 120 bpm.

But maybe I am misunderstanding the question and my answer goes onto a tangent.

Thanks again! But yes, my intention was slightly different, I wanted to be able to algorithmically produce those different pattern sizes that you “hardcoded“, as in being able to generate (for instance) versions truncated in different points of an original pattern, in realtime.

This track of mine here would be a practical example (done in Max in this case):

You can use reset or restart for this sort of thing. You give them a pattern where the source pattern plays for each event, truncated at the end. reset resets to the start of the current cycle, restart restarts the pattern from cycle 0.

[strudel]

$: sound(" cb bd - sd sd mt - ht - - bd").bank("spacedrum")
// .chunkinto(4, hurry(2))
.reset("1@4 1@8 1@12 1@8 1@4".pace(16))

$: sound("bd cp:3 - cp:3")

[/strudel]

2 Likes

I've used MaxMSP a bit and tried to get Strudel working inside a Max patcher. Best I've been able to do so far is run the web browser, play strudel from there and send the audio into other Max objects. I would think with node or V8 it's possible to use Strudel inside the Javascript code boxes but I think I need to learn more about how it works under the hood before I can do it.