About this project

Undertone is a TypeScript-based procedural synthesis engine designed for game sound effects and music production. It operates on the principle that everything is a pattern, allowing users to create everything from simple UI blips to complex multi-section songs using a consistent syntax inspired by Strudel and TidalCycles. Key capabilities include: - **Mini-notation**: A powerful string-based syntax for defining sequences, subdivisions, chords, Euclidean rhythms, and alternations. - **Synthesis & Playback**: Supports various waveforms (sine, triangle, square, sawtooth) and noise types (white, pink, brown), as well as a "bring-your-own-assets" sample playback system. - **Music Theory Tools**: Built-in support for scale-degree melodies and chord symbol expansion (voicing) based on mathematical implementations rather than bundled data. - **Voice Control**: Chainable, immutable controls for ADSR envelopes, lowpass/highpass filters, phasers, and pitch glides. Most numeric parameters can be patterned using mini-notation. - **Spatial Audio**: Supports stereo panning and multichannel placement up to 7.1 surround sound. - **Pattern Combinators**: Tools for manipulating patterns such as `fast`, `slow`, `rev` (reverse), `jux` (juxtapose), and `arrange` for song structuring. - **Performance Modes**: Offers both `.play()` for one-shot percussive effects and `.loop()` for scheduled musical sequences with BPM control.