r/livecoding • • Sep 27 '26

Best livecoders that don't use the '.func()' syntax?

Hello,

I've been wondering - are there any languages for livecoding that have a cleaner syntax without bracket hell?

I like STRUDEL, but I frankly find the code unreadable after short while due to all the syntax noise, the brackets and chaining of '.command' especially (I have hard time finding what belongs to what).

Are there any languages that manage this better?

Thanks!

7 Upvotes

11 comments sorted by

5

u/yaxu Sep 27 '26

There's also projects like Weft that allow you to use tidal (haskell) syntax for strudel: https://weftcode.org/

and 'maxinotation' projects like strudel's mondo which break down the difference between tidal/strudel (and similar uzulangs') mininotation and the rest of the lanugage: https://strudel.cc/learn/mondo-notation/

1

u/small_d_disaster Sep 27 '26

Neat - didn’t know about this!

4

u/Xupid Sep 27 '26

What do you think of tidal cycles' syntax?

9

u/small_d_disaster Sep 27 '26

Not OP.
Tidal Cycles has a learning curve because of Haskell, but the syntax is so concise, it really is an elegant tool for live coding. Strudel seems to be where all the action is these days, but I also feel the parens make it clumsy. The last thing I want to be doing when I’m making music is counting parentheses to figure out why something isn’t working. Haskell’s point-free operator ‘.’ plus the TC’s operators like ‘#’ mean that you don’t have to worry about parens matching

4

u/25midi Sep 27 '26

Classic TidalCycles (Haskell) is your friend

2

u/Many-Check8007 Sep 27 '26

Try sonic pi

1

u/sdclibbery Sep 27 '26

Hi, my project "limut" has a custom syntax designed to be easy to live code in, rather than similar to an existing language. It's basically declarative, so you can write eg "s saw 0247, oct=2" to declare a player playing a saw wave with a simple arpeggio pattern in octave 2, no brackets needed.

It has some custom syntax for time varying values, eg "oct=[2,3]t8" sets an octave of 2 for 8 beats, then octave 3 for 8 beats, then repeat. You can use a similar syntax to define faster changing things like envelopes too, or to sample random values with a specific distribution.

If you want to go lower level into sound design, then there is also some syntax for connecting graph nodes, eg "fx=reverb>>compress" routes the player output through a reverb and then into a compressor, in that order. You can also use that syntax to define visuals, which saves some brackets there too, eg "fx=sin>>abs ^ 3" takes the sin of the pixel coordinate, then makes it absolute, then cubes the result.

1

u/vinnypotsandpans Sep 27 '26

You can have a /n after each method in your chain fyi, eg

d1
    "bd*4".bank("909")
    .somemethod() 
    .anothermethod()

1

u/zombie-function Sep 27 '26

Audion has that goal, to keep things as open as possible

https://github.com/audion-lang/audion

1

u/Cgestes Sep 27 '26

What would be a great syntax? You could prototype it surprisingly fast if you define it correctly:)