CHMBR (v1.11)
Reference Manual
CHMBR ("chamber") is a browser-based tool for exploratory listening and composition. It generates and spatializes six independent noise sources (or "nodes") arranged around the listener, with controls for each node distributed in a circle on the screen; front-left, front-center, front-right, rear-left, rear-center, and rear-right nodes. These interact with a shared environmental noise bed (controlled by a central hub of sliders) and a modulation system (controlled by two sets of sliders on the flanks) to produce tonal and textural fields with organic movement. CHMBR is intended to provide highly detailed control over what is ultimately a limited palette (of noise, in this case). I designed this utility for focus and meditation, but also a vector for material exploration and certainly a synthesis tool that can be used for music composition.
While you can use this app with speakers, the stereo image is designed to resolve in 3D and therefore requires headphones for the full effect. Likewise, you can use this on a smartphone, but the controls are very dense and much easier to navigate on larger screens.
One of the first things you'll notice is that the interface is largely abstract and has very few labels. This approach to the UI both explodes and simplifies the relationship between cause and effect. As someone experienced in sound synthesis, this helps erode my preconceptions while avoiding having to hide controls behind menus. For someone who isn't, it erodes the technical barriers that can make advanced or modular synthesizers feel off limits.
The fastest way to see the system at work is to toggle the audio engine on using the circle above the central cluster of controls, and then to try out activating the Randomizer (the lightning bolt icon). This is a good way to quickly cycle through some of what CHMBR is capable of, as well as start to spot where the different controllable parameters are. Beyond that, just start clicking things and dragging them around; listen for what changes.
The screen is organized around a central ring with six node clusters arranged above and below it — three front nodes across the top half and three rear nodes across the bottom. To the left and right of the ring are the LFO (low frequency oscillator) panels, which drive most of the automation of different parameters. Inside the central ring are the environmental noise controls.
The main transport and utility controls sit on the outer edge of that ring at specific clock positions:
Each of the six nodes has five interactive areas ("orbs"). All draggable controls are hexagonal with a black center. Double-clicking any control resets it to its default value (though these are somewhat arbitrary and basically just correspond to the startup state). The output of the nodes themselves are a combination of digital noise and a modal resonator.
The five orbs are differentiated by size: the source orb is the largest, the material orb is medium-large, the regularity orb is medium-small, and the morph orb is the smallest. The decay ring encircles the source orb.
The large central orb for each node. Dragging within it controls two parameters simultaneously on an X/Y pad.
A large ring surrounding the source orb. Dragging rotates the indicator around the ring.
A medium-large satellite orb with a two-axis arrangement.
A medium-small satellite orb with a two-axis arrangement.
A small single-axis satellite orb.
Inside the central ring is a row of slim vertical sliders controlling a shared stereo noise bed that underlies all six nodes. This is a separate, continuously running signal that sounds more like analog noise. If the nodes can be seen as foreground, this would be the background. It provides ambient texture and spatial context. When the nodes are active the noise bed level is ducked a little for clarity.
The sliders are ordered left to right as follows:
Overall gain of the environmental noise bed.
Filter cutoff frequency. Controls the brightness of the noise bed. Range is 350 Hz to 8 kHz.
Stereo width. Low values are mono; high values produce a wide, immersive stereo field via mid/side processing.
Depth of the internal motion envelope; how much the noise bed breathes, swells, and opens over time. At zero the bed is static.
Speed of the motion oscillators. Low is very slow and oceanic; high produces faster rhythmic pulsing.
Morphs the motion envelope from a natural, wave-like swell (left) toward a rhythmic gate with sharp attack and decay (right).
Granular burst density. At zero there is no grain effect. Increasing it introduces intermittent amplitude bursts of varying length, creating a granular or stuttering texture.
Formant filter depth. Blends in two slowly drifting bandpass filters tuned to vowel-like frequency regions, lending the noise bed a quasi-vocal or resonant quality.
Amplitude modulation depth. Three inharmonic sine waves are summed to create an irregular tremolo. The rate is linked to the Rate slider.
Morphs the filter character from low-pass (bottom) through band-pass (middle) to high-pass (top) using a state-variable filter.
Comb filter depth. Adds metallic resonance by feeding the signal through a short delay line with feedback. The delay time drifts slowly, producing a shifting metallic colour.
To the left and right of the central ring are two banks of vertical sliders — the LFO modulation system. Each LFO is a sine wave that continuously modulates one of the node parameters. This means that each LFO controls a given parameter for every node at once. This creates a relationship across the entire sound engine, while allowing each manual control to act as an offset for this modulation.
The left bank controls LFO rate; the right bank controls LFO depth. The ten rows correspond to the ten modulatable node parameters: Level, Frequency, Density, Wet, Decay, Regularity, Cluster, Bandwidth, Damping, and Material.
A small arc drawn around each rate slider's thumb shows the LFO's current phase position.
You can see the effect of each LFO by looking for the moving ghost indicators (colored dots) across the nodes.
Sets the speed of each LFO. Range is approximately 0.008 Hz (one cycle every two minutes) to 12 Hz on a logarithmic scale. Scroll wheel also adjusts. Double-click resets to default rate.
Sets how far each LFO shifts its target parameter away from its user-set value. At zero there is no modulation; at full the LFO sweeps half the parameter range above and below the current setting. Double-click resets to 0.5.
The upward-pointing triangle above the rate bank. Enables or disables all LFO modulation globally. When disabled, sliders dim and all parameters hold their user-set values exactly.
The snowflake icon to the left of the LFO toggle. Freezes all LFO phases in place — modulation continues to be applied at the current phase values, but no LFO advances. Useful for locking a particular modulation moment.
Downward triangle below the rate bank. Randomizes all ten LFO rates simultaneously.
Downward triangle below the depth bank. Randomizes all ten LFO depths simultaneously.
Four small triangles above the depth bank set all depths at once to fixed values: 75%, 50%, 25%, and 0% (off). The 0% button is tinted red.
Starts and stops the sound engine. The circle dims when stopped and glows when running.
Controls overall output level. Drag within the orb — distance from centre maps to volume. Scroll wheel also adjusts. Double-click resets to 90%.
The lightning bolt button randomizes all node and environmental noise parameters, as well as all LFO rates and depths simultaneously. The master volume and the level for the environmental noise bed are not affected.
This button allows a user to browse and load built-in preset save states from select artists.
Saves the complete current state — all node parameters, environmental settings, LFO values, oscillator phases, and master volume — to a JSON file.
Opens a file picker for loading a previously saved state file. Parameters are applied immediately.
Taps the master output and records it to a WAV file. Click once to start recording — a small timer appears above the button showing elapsed time. Click again to stop. You'll be prompted to name the file before it downloads.
Recordings are lossless 16-bit stereo WAV at whatever sample rate your audio context is running (typically 44.1 or 48 kHz). The output is peak-normalised on stop, so the file will never clip regardless of how loud the session is running.
State files are plain JSON. They capture all node parameters, environmental settings, LFO configuration, oscillator phases, and master volume. They are forwards-compatible — older files will load correctly in newer versions, and any parameters not present in an older file will remain at their current values.
The one aspect of a state that cannot be fully reproduced on load is the internal memory of the modal resonator filters. These settle within approximately one to two seconds after a state is loaded, after which the sound will be very close to the original.