It just occurred to me that learning to program in was a good thing not only for me as a musician, but also as a programmer.

It is actually in SuperCollider where I think I have first learned some functional(ish) programming idioms (like map, filter, non-index-based iteration). And the level of expressiveness of the language made me look for similar non-imperative idioms in other languages.

I haven't looked at yet (which SC is inspired by), curious about it.

Okay, so Tone.js seems to offer what I need - a way to route the signals however I want plus objects for math operations and useful abstractions (as well as the very convenient LFO node with range arguments.)

Feels close enough to in fact.

tonejs.github.io/docs/14.7.77/

Show thread

The youtube stream from my performance yesterday didn't work out very well, but I have published the original stream as I have recorded locally:

ጮ.cc/2020/10/25/below.html

Today I will be performing live from Lem Station in Lviv, 16:30 UTC / 18:30 local time; the performance is based on the acoustic environment of an underground sewer tunnel located right below where I will be located.

It is going to be streamed on the Lem Station YT channel:
youtube.com/channel/UCJkqir30N

It's good to know that in this fat synth sound:

youtube.com/watch?v=UYPnyAyZEd

The reverb plugin does like 75% of the sound:
youtube.com/watch?v=avjdyKfCLs

...including pitch shifting polyphony etc.

I don't feel that dumb anymore with my primitive oscillators :)

Noticed a new release (3.11).

One thing that caught my eye is an ability to synchronize with Ableton - I'm not using Ableton, but if playing in a group with someone who does, that might be useful.

I’m very happy to have participated in the amazing Eulerroom Equinox 2020 - an all-online four-day festival. Here's the recording of my performance, an improvised drone/ambient piece.

www: ጮ.cc/2020/03/22/live-at-eulerr
onion: 57f23hcybjqj4ime.onion/2020/03

A nice way to combine patterns with NodeProxies when livecoding is to use the \set NodeProxy role, like this (provided you have a ProxySpace activated):

~snd[0] = { SinOsc.ar(\freq.kr); }
~snd[1] = \set -> Pbind(\degree, ..., \dur, ...);

It allows attaching a Pbind to a NodeProxy to steer its controls. How didn't I pay attention to this before?

@supercollider

doc.sccode.org/Reference/NodeP

Playing a bit with developing little language learning games in . It turns out refreshingly easy to do these simple GUIs, and the bundled smiley faces in pict/face make it even simpler:)

I don't yet understand though how to manage state in GUIs without imperatively mutating variables. Ideally I would use something like a Python generator or Task to store and advance the current challenge, but I'm too new to Racket to figure out how to do it. Any hints?

La Quadrature du Net - Mastodon - Media Fédéré

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!