6.5 KiB
6.5 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.0.7] - Unreleased
Added
- 3-operator FM synthesis words:
fm2(operator 2 depth),fm2h(operator 2 harmonic ratio),fmalgo(algorithm: 0=cascade, 1=parallel, 2=branch),fmfb(feedback amount). Extends the existing 2-OP FM engine to a full 3-OP architecture with configurable routing and operator feedback. - Background head-preload for sample libraries. At startup, a background thread decodes the first 4096 frames (~93ms) of every sample into RAM. Short samples (most percussion/drums) are fully captured and play instantly on first trigger. Eliminates first-hit misses for live performance.
Fixed
- Code editor now scrolls vertically to keep the cursor visible. Previously, lines beyond the visible area were clipped and the cursor could move off-screen.
[0.0.6] - 2026-05-02
Added
- TachyonFX based animations
- Prelude: project-level Forth script for persistent word definitions. Press
dto edit,Dto re-evaluate. Runs automatically on playback start and project load. - Varargs stack words:
rev,shuffle,sort(ascending),rsort(descending),sum,prod. All take a count and operate on the top n items. - Euclidean rhythm words:
euclid(k n -- hits) distributes k hits across n steps,euclidrot(k n r -- hits) adds rotation offset. - Shorthand float syntax:
.25parses as0.25,-.5parses as-0.5.
Changed
- Split
words.rs(3,078 lines) into awords/directory module with category-based files:core.rs,sound.rs,effects.rs,sequencing.rs,music.rs,midi.rs, pluscompile.rsandmod.rs. - Renamed
triForth word totriangle. - Sequencer rewritten with prospective lookahead scheduling. Instead of sleeping until a substep, waking late, and detecting past events, the sequencer now pre-computes all events within a ~20ms forward window. Events arrive at doux with positive time deltas, scheduled before they need to fire. Sleep+spin-wait replaced by
recv_timeout(3ms)on the command channel. Timing no longer depends on OS sleep precision. audio_sample_posupdated at buffer start instead of end, soengine_timereflects current playback position.- Doux grace period increased from 1ms to 50ms as a safety net (events should never be late with lookahead).
- Flattened model re-export indirection;
script.rsnow exports onlyScriptEngine. - Hue rotation step size increased from 1° to 5° for faster adjustment.
- Moved catalog data (DOCS, CATEGORIES) from views to
src/model/, eliminating state-to-view layer inversion. - Extracted shared initialization into
src/init.rs, deduplicating ~140 lines between terminal and desktop binaries. - Split App dispatch into focused service modules (
help_nav,dict_nav,euclidean,clipboard, extendedpattern_editor), reducingapp.rsby ~310 lines. - Moved stack preview computation from render path to input time, making editor rendering pure.
- Decoupled script runtime state between UI and sequencer threads, eliminating shared mutexes on the RT path.
Fixed
- Prelude content no longer leaks into step editor. Closing the prelude editor now restores the current step's content to the buffer.
- Desktop binary now loads color theme and connects MIDI devices on startup (was missing).
- Audio commands no longer silently dropped when channel is full; switched to unbounded channel matching MIDI dispatch pattern.
- PatternProps and EuclideanDistribution modals now use the global theme background instead of the terminal default.
- Changing pattern properties is now a stage/commit operation.
- Changing pattern speed only happens at pattern boundaries.
mlockallwarning no longer appears on macOS; memory locking is now Linux-only.clearnow resetsatdeltas, so subsequent emits default to a single emit at position 0.
[0.0.5] - 2026-04-02
Added
- Mute/solo for patterns: stage with
m/x, commit withc. Solo mutes all other patterns. Clear withM/X. - Lookahead scheduling: scripts are pre-evaluated ahead of time and audio commands are scheduled at precise beat positions, improving timing accuracy under CPU load.
- Realtime thread scheduling (
SCHED_FIFO) for sequencer thread on Unix systems, improving timing reliability. - Deep into the Linux hellscape: trying to get reliable performance, better stability, etc.
Fixed
- Editor completion popup no longer steals arrow keys. Arrow keys always move the cursor; use Ctrl+N/Ctrl+P to navigate the completion list.
[0.0.4] - 2026-02-02
Added
- Double-stack words:
2dup,2drop,2swap,2over. forgetword to remove user-defined words from the dictionary.- Active patterns panel showing playing patterns with bank, pattern, iteration count, and step position.
- Configurable visualization layout (Top/Bottom/Left/Right) for scope and spectrum placement.
- Euclidean distribution modal to spread a step's script across the pattern using Euclidean rhythms.
- Fairyfloss theme (pastel candy colors by sailorhg).
- Hot Dog Stand theme (classic Windows 3.1 red/yellow).
- Hue rotation option in Options menu to shift all theme colors (0-360°).
Changed
- Title view now adapts to smaller terminal sizes gracefully.
Fixed
- Scope/spectrum ratio asymmetry in Left/Right layout modes.
- Updated
cpaldependency from 0.15 to 0.17 to fix type mismatch withdouxaudio backend. - Copy/paste (Ctrl+C/V/X) not working in desktop version due to egui intercepting clipboard shortcuts.
[0.0.3] - 2026-02-02
Added
- Polyphonic parameters: param words (
note,freq,gain, etc.) and sound words now consume the entire stack, enabling polyphony (e.g.,60 64 67 note sine s .emits 3 voices). - New random distribution words:
exprand(exponential) andlogrand(logarithmic). - Music theory chord words:
maj,m,dim,aug,sus2,sus4,maj7,min7,dom7,dim7,m7b5,minmaj7,aug7,maj6,min6,dom9,maj9,min9,dom11,min11,dom13,add9,add11,madd9,dom7b9,dom7s9,dom7b5,dom7s5. - Playing patterns are now saved with the project and restored on load.
Changed
atnow consumes the entire stack for time offsets; polyphony multiplies with deltas (2 notes × 2 times = 4 voices).- Iterator (
iter) now resets when a pattern restarts. - Project loading now properly resets state: stops all patterns, clears user variables/dictionary, and clears queued changes.
Removed
tcycleword (replaced by polyphonic parameter behavior).
[0.0.2] - 2026-02-01
- CI testing and codebase cleanup
[0.0.1] - Initial Release
- CI testing