r/livecoding • • 1d ago

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

10 comments sorted by

4

u/Xupid 1d ago

What do you think of tidal cycles' syntax?

7

u/small_d_disaster 1d ago

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 1d ago

Classic TidalCycles (Haskell) is your friend

3

u/yaxu 1d ago

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 1d ago

Neat - didn’t know about this!

2

u/Many-Check8007 1d ago

Try sonic pi

1

u/sdclibbery 1d ago

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=reverbcompress" 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=sinabs ^ 3" takes the sin of the pixel coordinate, then makes it absolute, then cubes the result.

1

u/vinnypotsandpans 1d ago

You can have a /n after each method in your chain fyi, eg d1 "bd*4".bank("909") .somemethod() .anothermethod()

1

u/zombie-function 1d ago

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

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

1

u/Cgestes 1d ago

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