what is dough?

dough is a monolithic audio engine for live coding, written in a single c file. it is designed after superdough, the audio engine behind strudel. it runs both natively and in the browser.

dough is free & open source software: you can redistribute and/or modify it under the terms of the GNU Affero General Public License. you can find the source code here.

read more about the backstory here. dough draws inspiration from dirt, superdough, kabelsalat and noisecraft.

caution: dough is still in development, so expect rough edges..

function reference

this page introduces dough and its ideas in a linear fashion. to see all available parameters, see the function reference

what is dough, technically?

dough is an opinionated, fixed path, semi-modular synth that is remote-controlled via messages. each message contains one or more key/value pairs, which control the many parameters of the synth.

dough-lang

to explain dough, this page uses these inputs:

you can change any of these. to hear the result, press ctrl+enter (or press stop/run). to stop, you can also use ctrl+. try it!

or with multiple lines:

lines can also be commented out by putting // at the start.

envelopes

the following parameters have envelopes:

for each of these, we can set the following envelope params:

for example, to get a low-pass decay, we can use the lpd param:

if we replace lpd with lpa, it turns into an attack:

we can also combine both lpa and lpd for an AD envelope:

note that the sustain value changed, based on what we set:

of course, we can also set the sustain value explicitly:

you are strongly encouraged to play with the values to get a feel for what they do!

these examples used a low pass filter envelope, but you can replace the lp with any other param on the list above:

how to run dough

running in the browser

here's how you can run dough in the browser:


        
        

note that dough uses shared memory, so the server you're serving from needs to set the following headers:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

for local development, dough provides a simple dev server that can be used:

npx --yes dough-synth@latest

run it in the same directory as the above html file, then open localhost:8888/. the command will only work if you have node.js installed.

running natively

so far, dough has no prebuilt binaries, so you need to build from source. see development setup for more info.