Native

The web version is fun! However, Doux was ported to Rust in order to be used natively in any application that needs an audio engine. You can compile Doux on your computer or use it in applications that integrate it such as Sova or Cagire. You will need the Rust toolchain installed in order to compile it: Rustup.


Binaries

  • doux: OSC server, listening on a configurable port (defaults to 57120). Use it with other software like TidalCycles, Strudel, Cagire or Sova. It will listen to any incoming message until you exit the process.

  • doux-repl: REPL with readline support and command history saved to ~/.doux_history. Built-in commands: .quit (.q), .reset (.r), .hush, .panic, .voices, .time, .stats (.s), .help (.h).

  • doux-render: offline WAV renderer. Evaluates commands and writes the result to a file. Useful for non-realtime rendering or batch processing.

  • doux-sova: thin-layer used to communicate with Sova.
Common flags

Shared across doux and doux-repl.

FlagShortDescription
--samples-sDirectory containing audio samples
--list-devicesList audio devices and exit
--input-iInput device (name or index)
--output-oOutput device (name or index)
--channelsNumber of output channels (default: 2)
--buffer-size-bAudio buffer size in samples (default: system)
--max-voicesMaximum polyphony (default: 32)
--hostAudio host backend: jack, alsa, or auto (default: auto). On Linux with PipeWire, use jack
--preloadPreload all samples at startup (doux only)
--diagnoseRun audio diagnostics and exit
--port-pOSC port (doux only, default: 57120)
Render flags

Flags specific to doux-render.

FlagShortDescription
--duration-dDuration to render in seconds (required)
--eval-eCommand to evaluate (repeatable)
--output-oOutput WAV file path (required)
--samples-sDirectory containing audio samples
--sample-rateSample rate (default: 48000)
--channelsNumber of output channels (default: 2)
--max-voicesMaximum polyphony (default: 64)
Multichannel

The --channels flag enables multichannel output beyond stereo. The number of channels is clamped to your device's maximum supported count. The orbit parameter controls output routing. With N output channels, there are N/2 stereo pairs. Voices on orbit 0 output to channels 0–1, orbit 1 to channels 2–3, and so on. When the orbit exceeds the number of pairs, it wraps around via modulo. Effects (delay, reverb) follow the same routing: each orbit's effect bus outputs to its corresponding stereo pair.

Buffer size

The --buffer-size flag controls audio latency. Lower values mean less latency but require more CPU. Common values: 64, 128, 256, 512, 1024. At 48kHz, 256 samples gives ~5.3ms latency. If unset, the system chooses a default. Use lower values for live performance, higher values for stability.

Sample loading

The --samples flag allows you to (lazy-)load audio samples to play with. The engine expects a folder containing folders of audio samples. Samples will be available using the folder name. You can index into a folder by using the /n/ command. Check the reference to learn more about this. Use --preload to load all samples eagerly at startup instead.