Syntə RSS repo @m
back

29/01/2024

What Is Syntə?

Syntə is a live-coding language and platform with included sound engine.
The language is based around DSP, to perform audio synthesis. It is also user-extensible, meaning that you can build up your own abstractions (functions) to streamline your workflow. A library of useful functions is also included.

For instance, you can finely sculpt pulsating bottom-end sounds, warp your timebase with continuous shapes, freely experiment with alternative tunings (eg. just intonation), generate interference patterns, play with chaotic attractors, or even nerd out with custom reverb and timestretching algorithms. The general idea is to open up a new realm for coding performance, in compliment to existing approaches.

Here I’ll take you on a whistle stop tour, please refer to the documentation for a more comprehensive guide with more info for beginners.

What is different about Syntə?

Lot’s of things, depending on what you’re comparing it to. If you’re coming from pure data or hardware modular, a lot of the concepts will be similar, but with more low level access compared to typical modules. A lot of the awkward and frustrating parts of pure data have been eliminated too. For example, loading and scanning samples is as simple as typing wav <filename>.
The syntax will feel very different to people used to tidalCycles or foxdot. In a way the language is more procedural/imperative, in another way it is more functional in style. This is because the base language is very atomic, almost like assembly language - a place where all paradigms converge.
Some favourites such as Euclidean/poly rhythms have been carried over, but in a way that fosters different possibilities.

Patterns and shapes

A shape describes some part of a waveform or its amplitude or pitch. Shapes can also describe larger constructs in an arrangement or abstractions such as different timbres. A pattern is a repeated shape. Like a tiled surface or knitted jumper.
Syntə allows you to freely describe shapes and compose them into patterns. By its very nature nearly every shape is a repeating one. MIDI note on/off signals are binary, so their ‘shape’ is a square, or pulse, wave. With Syntə you can go beyond this by applying all manner of transformations to your patterns. An example would be:

in 3hz
pulse 0.2
hpf 5hz
lpf 15hz
out vca
...

This snippet produces a signal named vca which can be used in any way, but the name suggests mul vca, which is an amplifier (attenuator in this case). The pulse wave has been shaped by two filters.
Now, every approach has tradeoffs so don’t expect to be performing the same way as other languages. The intention was never to replace anything else, but to add another approach to the ecosystem. A fruitful path that opens up new options.
I’m continuing to develop and hone abstractions in the language, one idea for future is to create ’toolkits’ which would frame specific approaches. This would narrow the field of view (the underlying language still available though), yet also enable faster turn over of patterns and ideas.
Also, the underlying language may change and adapt to reflect IRL performance - the ultimate value of Syntə will derive from engagement with the community at large.

Does Syntə have any other tricks up its sleeves?

Having worked extensively with other methods for live-coding I was well aware of some of the pitfalls. So from the beginning I wanted to mitigate or eliminate them entirely.
One crucial area is sound levels. This is quite a deep topic, as it involves not just physics but psycho-acoustics too. Our ears are very frequency and level dependent and any audio needs to take this into account. Traditionally for recorded music this has been done manually by studio and mastering engineers; however this is computing so we have an opportunity to let the code do most of the heavy-lifting. (no pun intended!)
The sound engine in Syntə has two principal mechanisms. The mix function reads the most recent oscillator frequency of a listing and sets a level based on the heuristic of approximating pink noise. You can read more about this in the delightful book The Artful Universe by John D. Barrow.
The second feature is a frequency dependent limiter on the output of the sound engine. This has two main actions. One is to avoid clipping, and the other is to enforce a ‘pink spectrum’ by reducing levels in proportion to frequency. If anyone is interested I may write a more in depth post on this topic and the tradeoffs/decisions involved.
Other considerations included making the syntax friendly, eg. by having not just a pow operator, but also a base. Essentially the necklace input and operands of these are just swapped, but it’s a small thing that makes things a lot easier. Also, as mentioned, playback of samples is kept very flexible but also very simple too:

in r.wavname
osc
wav wavname
mix

Doesn’t get much simpler than that. The possibilities immediately open up, for instance by inserting a flip after osc the sample will play backwards.

Ok, but what’s missing?

Well, probably the biggest leap forward planned for this year is to port to systems other than BSD/Linux. MacOS would probably be the first target. A web port has been explored, but unfortunately Go doesn’t play nicely with the WASM audio abstractions, so that has been shelved for now.
One possibility to consider is making the language strongly typed, which would assist beginners in getting going.
Another future possibility is implementing MIDI or OSC, this would open up the language and sound engine to be used as an alternative back-end for other sequence based languages, and also to play other instruments. A fun collab would be to combine sequenced midi from another live coder with sounds and patterns from Syntə 😀

I’m actively performing with and learning the language (no one is an expert in it yet!) and so far it’s been really rewarding. If anything the main challenge is keeping in mind all the possibilities while in front of an audience! It’s a nice problem to have :)

and…

Here’s a short demo of Syntə in action, typing in a new listing from scratch. Sound begins 38 seconds in:

The first listing is a simple interference (overflow) pattern modulating the pitch of a sine wave over one octave. The other is a simple feedback delay echo.


 updated on: 4 / 2 / 2024

↑ top