Suggestions for an additive synth on Racket

74 views
Skip to first unread message

Dimaugh Silvestris

unread,
Dec 4, 2020, 5:19:54 PM12/4/20
to Racket Users
I would like to build an additive synth on Racket, but I can't decide myself
wether I should use SuperCollider, Rsound or Fluxus.

SuperCollider I've used already with Sclang and Haskell, and I admire
it's efficiency, but it has some quirks I dislike (like the order of
execution of UGENs). I tried a Racket client
(https://github.com/quakehead/racket-schttps://github.com/quakehead/racket-sc)
but it doesn't compile, apparently a minor error in the code or some
change that made it backwards incompatible, but since I don't
understand the context, I wouldn't know how to fix. Plus, it seems to
be completely abandoned.

Then there is a R6RS cient, would I be able to use it from Racket?
http://rohandrape.net/ut/rsc3-texts/html/rsc3-tutorial.html
But it also seems to require Ikarus Scheme  (never heard of that impl before).

Then there is what seems to be a more native solution, Rsound. Does it
work in a SC-like manner, with a server and a client arquitecture? Is
it efficient enough for an additive synth, will I be able to run
hundreds of oscillators with their own envelopes without setting my
laptop on fire? Is it sufficiently mature for this project? If those
boxes match, I would love to go for this one.

Then there is this very interesting project, Extempore, but it's not
exactly Racket. It's a Scheme interpreter with a server programmed in
Xtlang, a typed Scheme with manual memory allocation. This reminded me
of Typed Racket, and I wondered: would it be possible to have a #lang
like Typed Racket but without GC and with manual memory allocation for similar
low-level real time applications? That would be incredibly cool.

And then there is Fluxus, but it seems unmantained and perhaps more
specialized on 3D graphics, but I'd be happy to be wrong.

parawi...@gmail.com

unread,
Dec 31, 2020, 8:24:11 AM12/31/20
to Racket Users
I've been toying with sound synthesis (and especially additive) within racket for years, but I mostly do it offline (the aiff/aiffc format is pretty straightforward to understand even for a programming illiterate like me). For pseudo real-time you may consider using the command line utility sox. It can read bytes from its standard input and forward it to your soundcard output.
Regarding using SC as the audio engine, in my experience the part of rsc3's code that matters does work despite the error message when installing the package, but I think it isn't practical for designing instruments and despite the significant performance gain (350 vs 50 partials in realtime on an i3) and how satisfying and useful being able to modify and hear parameter changes live truly is, SC also did come with a few letdowns compared to what I'm able to achieve within racket...
Reply all
Reply to author
Forward
0 new messages