diff --git a/CHANGELOG.md b/CHANGELOG.md index ef971cb..152b8c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,56 @@ All notable changes to this project will be documented in this file. +## [0.1.4] + +### Breaking +- **Doux v0.0.12**: removed Mutable Instruments Plaits modes (`modal`, `va`, `analog`, `waveshape`, `grain`, `chord`, `swarm`, `pnoise`, etc.). Native percussion models retained; new models added: `tom`, `cowbell`, `cymbal`. +- Simplified effects/filter API: removed per-filter envelope parameters in favor of the universal `env` word. +- Recording commands simplified: removed `/sound/` path segment from `rec`, `overdub`, `orec`, `odub`. + +### Forth Language +- New modulation transition words: `islide` (swell), `oslide` (pluck), `pslide` (stair/stepped). +- New `lpg` word (Low Pass Gate): pairs amplitude envelope with lowpass filter modulation. +- New `inchan` word: select audio input channel by index. +- New EQ frequency words: `eqlofreq`, `eqmidfreq`, `eqhifreq`. + +### UI / UX +- Redesigned top bar: consolidated transport, tempo, bar:beat display with visual beat segments. +- CPU meter with color-coded fill bar (green/yellow/red). + +### Engine +- Audio input channel selection support. +- Audio buffer sizing improved for multi-channel input. + +### Packaging +- CI migrated from GitHub Actions to Gitea Actions. +- Removed WIX installer; Windows now distributed via zip and NSIS only. +- Gitea Actions workflow for automatic website deployment. +- Added LICENSE file. + +### Documentation +- Extensive documentation updates reflecting doux v0.0.12 API changes across sources, filters, modulation, wavetable, and audio modulation docs. + +## [0.1.3] + +### Forth Language +- New `stretch` word: pitch-independent time stretching via phase vocoder (e.g., `kick sound 2 stretch .` plays at half speed, same pitch). +- Automatic default release time on sounds when none is explicitly set. + +### Engine +- Sample-accurate timing: delta computation switched from float seconds to integer sample ticks, fixing precision issues. +- Lock-free audio input buffer: replaced `Arc>` with `HeapRb` ring buffer. +- Theme access optimized: `Rc` replaces deep cloning on every `get()`. +- Dictionary keys cached in `App` to avoid repeated lock acquisitions during rendering. + +### Fixed +- Realtime priority diagnostics: dedicated `warn_no_rt()` on Linux, lookahead widened from 20ms to 40ms when RT priority unavailable. +- Float epsilon precision in delta/nudge zero-comparisons. +- Windows build fixes for standalone and plugin targets. + +### Documentation +- Time stretching usage guide added to `docs/engine/samples.md`. + ## [0.1.2] ### Forth Language diff --git a/Cargo.lock b/Cargo.lock index 5ea99c8..a0eb92b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -859,7 +859,7 @@ dependencies = [ "cpal 0.17.1", "crossbeam-channel", "crossterm", - "doux 0.0.12", + "doux", "eframe", "egui", "egui_ratatui", @@ -911,7 +911,7 @@ dependencies = [ "cagire-ratatui", "crossbeam-channel", "crossterm", - "doux 0.0.10", + "doux", "egui_ratatui", "nih_plug", "nih_plug_egui", @@ -1809,25 +1809,8 @@ dependencies = [ [[package]] name = "doux" -version = "0.0.10" -source = "git+https://github.com/sova-org/doux#7f4e548ae3a917e62cf4c9acb7540496684f0d8f" -dependencies = [ - "arc-swap", - "clap", - "cpal 0.17.1", - "crossbeam-channel", - "mi-plaits-dsp", - "ringbuf", - "rosc", - "rustyline", - "soundfont", - "symphonia", -] - -[[package]] -name = "doux" -version = "0.0.12" -source = "git+https://github.com/sova-org/doux?tag=v0.0.12#5b62d6634df217a00ced5e711fe98b77c9d3f79c" +version = "0.0.13" +source = "git+https://github.com/sova-org/doux?tag=v0.0.13#b8150d907e4cc2764e82fdaa424df41ceef9b0d2" dependencies = [ "arc-swap", "clap", @@ -1852,12 +1835,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - [[package]] name = "ecolor" version = "0.33.3" @@ -3255,16 +3232,6 @@ dependencies = [ "paste", ] -[[package]] -name = "mi-plaits-dsp" -version = "0.1.0" -source = "git+https://github.com/sourcebox/mi-plaits-dsp-rs?rev=dc55bd55e73bd6f86fbbb4f8adc3b598d659fdb4#dc55bd55e73bd6f86fbbb4f8adc3b598d659fdb4" -dependencies = [ - "dyn-clone", - "num-traits", - "spin", -] - [[package]] name = "micromath" version = "2.1.0" @@ -5145,15 +5112,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a7f4cb358863e55f8f1a3882f68601360cf6c42fc53ff2fe9aea41c33e24489" -[[package]] -name = "spin" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" -dependencies = [ - "lock_api", -] - [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" diff --git a/Cargo.toml b/Cargo.toml index 6bac381..b1e81cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,13 +45,14 @@ desktop = [ "dep:egui_ratatui", "dep:image", ] +asio = ["doux/asio", "cpal/asio"] [dependencies] cagire-forth = { path = "crates/forth" } cagire-markdown = { path = "crates/markdown" } cagire-project = { path = "crates/project" } cagire-ratatui = { path = "crates/ratatui" } -doux = { git = "https://github.com/sova-org/doux", tag = "v0.0.12", features = ["native", "soundfont"] } +doux = { git = "https://github.com/sova-org/doux", tag = "v0.0.13", features = ["native", "soundfont"] } rusty_link = "0.4" ratatui = "0.30" crossterm = "0.29" diff --git a/plugins/cagire-plugins/Cargo.toml b/plugins/cagire-plugins/Cargo.toml index 20b3953..c7dba50 100644 --- a/plugins/cagire-plugins/Cargo.toml +++ b/plugins/cagire-plugins/Cargo.toml @@ -14,7 +14,7 @@ cagire = { path = "../..", default-features = false, features = ["block-renderer cagire-forth = { path = "../../crates/forth" } cagire-project = { path = "../../crates/project" } cagire-ratatui = { path = "../../crates/ratatui" } -doux = { git = "https://github.com/sova-org/doux", features = ["native", "soundfont"] } +doux = { git = "https://github.com/sova-org/doux", tag = "v0.0.13", features = ["native", "soundfont"] } nih_plug = { git = "https://github.com/robbert-vdh/nih-plug", features = ["standalone"] } nih_plug_egui = { git = "https://github.com/robbert-vdh/nih-plug" } egui_ratatui = "2.1"