Skip to content

Render a Project

render() bounces offline, faster than real time. Put it in the project’s src/main.non and run resonon run in the project folder, or evaluate it in a live session. What it can render, including visuals, is listed under render.

List the tracks, add master, and give the number of cycles:

use "std/instruments" { Sampler, Kit };
use "std/effects" { Lowpass, Highpass };
set_project_title("House Beat");
let kicks = AudioTrack("kicks");
kicks.set_instrument(Sampler(Kit("CR-78")));
kicks << [bd*4];
kicks.set_effects(#[Lowpass("lowpass", 600)]);
let hats = AudioTrack("hats");
hats.set_instrument(Sampler(Kit("CR-78")));
hats << [_ hh].fast(4);
hats.set_effects(#[Highpass("highpass", 3000)]);
render(#[kicks, hats, master], 4);

Each track is written as its own WAV, and master as the full mix.

render(4); // the master mix
render(kicks, 4); // one track

set_project_title() names the output folder; set_project_artist() sets the artist. Without a title, the folder is named after the package in resonon.toml.

set_project_title("House Beat");
set_project_artist("RESONON");

Each render gets its own folder under renders/ in the project, named after the title and the time, so renders never overwrite each other:

my_piece/
resonon.toml
src/main.non
renders/
house_beat_2026-09-07_18-00-00/
kicks.wav
hats.wav
master.wav

The files are 24-bit, 48 kHz stereo WAV. Live output pauses while a render runs, and a progress bar in the terminal shows the cycle and the time left. The render captures the session as it sounds — instruments, effects, sends and automation. MIDI tracks, hardware outputs and live inputs are not in it: What a render contains.