The SuperCollider audio synthesis environment allows the definition of Synths, digital instruments which generate sound using a graph of interconnected unit generators. In SuperCollider the definition of a Synth is mostly declarative, on the other hand the logic for controlling parameters of a Synth using musical controllers is usually implemented in a different context using callbacks and explicit state.
This paper presents a different approach where functional reactive programming (FRP) is used to define the control logic of the instrument, taking inputs from musical controllers, mobile apps or graphical user interface (GUI) widgets and sending outputs to the audio graph. Both audio and FRP graphs are defined in the same context and compiled simultaneously avoiding a hard division between audio and control logic.
An FRP implementation is used in the NNdef class to enable livecoding of both audio and FRP code, with hot-swap allowing an interactive workflow. Also included is a system to persist the state in the FRP network in order to save and recall the instrument at a later time.
A well-typed work of art should not sound wrong:
we can use DSLs to get this boon.
Existing work has cover’d this for song,
at least so far as harmony and tune.
Well, verse contrains the author’s pencil thus:
In English verse, the syllables adhere
to certain contours. Catenation plus
the empty form create a monoid here.
But not all poems stay within their meter;
some, like this, can be a little free
and so our monoid has to let us teeter
on the edge, as tunes oft do with key.
Our monoid must be fuzzy at its heart
to let us teach computers of this art.
Programming by example allows users to create programs without coding, by simply specifying input and output pairs. We introduce the problem of digital signal processing programming by example (DSP-PBE), where users specify input and output wave files, and a tool automatically synthesizes a program that transforms the input to the output. This program can then be applied to new wave files, giving users a new way to interact with music and program code. We formally define the problem of DSP-PBE, and provide a first implementation of a solution that can handle synthesis over commutative filters.
The notion of effect in programming languages has evolved significantly since the works of Lucassen and Gifford – where an effect system tracks memory regions and enables the improvement of parallel execution – to the point where an algebraic characterisation of effects is proposed. In this work, we seize the such notions to design a calculus, λgenArt, tailored to generative art. We provide the semantics and type system of λgenArt, alongside an effect algebra and a new parallel constructor. We also implemented the calculus as an DSL in the Haskell programming language and introduced optimisations based on the effect information. This work is the first step towards the specification and implementation of a declarative, functional language for generative art based on algebraic effects and handlers.
This is a summary of the demonstrations presented at the 6th ACM SIGPLAN International Workshop on Functional Art, Music, Modeling and Design (FARM).
This is a summary of the performances presented as part of the 2018 ACM SIGPLAN International Workshop on Functional Art, Music, Modeling, and Design, prepared prior to the event.