diff --git a/docs/ideas.md b/docs/ideas.md index f363e86..701803d 100644 --- a/docs/ideas.md +++ b/docs/ideas.md @@ -91,6 +91,125 @@ Patina. Findings from the audit: - **Settings handling differs.** Patina has presets and A/B; the others do not. Lathe's drawn gains and Knurl's drawn pattern cannot be automated. +## Producer feedback (2026-11-06) + +Feedback from producers who tried the suite: most plugins are confusing to use. +One example: "why does it try to detect the key? It switches around fast, +because sounds usually aren't just one kind of note." Anvil "was kind of cool, +but didn't do what we expected." Patina's feedback (threshold, ratio) is handled +in Patina 0.5.0. + +### What goes wrong + +1. **Nine of thirteen plugins depend on one hidden guess: the note.** Anvil, + Lathe, Temper, Knurl, Planish, Braze, Forge, Ballast (Notes mode) and + Crucible (file names) all read the pitch from the audio. Patina's Tone guard + also does, but it is off by default. Our tests use saws and sines, where + tracking is perfect. Real riddim basses are FM growls, formant sweeps, noise, + pitch drops, stacked octaves and layers. On those, "the note" is often not + one note. +2. **The tracker is built to react fast, not to stay put.** In + `common-dsp/src/tracker.rs`, a move of 0.7 semitone that holds for two 5 ms + hops starts a new note. Smaller moves retune every 5 ms. Frames below + clarity 0.5 are skipped, but the last guess stays in use. On a growl, the + formant and FM movement reads as a pitch moving every few milliseconds, and + octave errors count as new notes. The NOTE readout flickers, and everything + tuned to the note moves with it. That is the "switches around fast". +3. **A wrong guess is worse than no guess.** When tracking is wrong, a tracked + plugin does something no normal plugin would do: + - Anvil plays a sub at the wrong pitch. + - Lathe moves its bands onto the wrong frequencies. + - Temper's Floor, Push and Bright filters jump. + - Planish's band edges jump, so the bands pump. + - Braze's beating leaves the grid. + - Knurl's cycle clock runs at the wrong rate. + - Crucible names a slice after a note it is not. + A producer cannot tell this from "the plugin is broken". +4. **The plugins explain themselves in DSP terms.** Harmonic numbers, cycles, + periods, splits, phase and allpass sections. A producer reads the category + ("EQ", "distortion", "OTT", "sub") and expects that behaviour. When the + tracked behaviour differs, it feels random. +5. **The escape route is hidden.** MIDI as the pitch source fixes the guess, + but in FL Studio it needs the channel's MIDI output port and the effect's + input port set to the same number. Few producers know how to do that. +6. **Panels show everything at once.** Most plugins put 10–20 controls on the + front panel, with equal weight. The one or two that matter for the first + result do not stand out. + +### Principles for the next round + +- **Never act on a guess you are unsure of.** Every tracked plugin falls back + to something neutral when tracking is unsure: pass the audio through, keep + the original sub, or use fixed-Hz settings. It does not fall back to the last + guess. Show this state: the NOTE readout dims or shows "—". +- **Stable by default.** A new note needs a confident pitch held for 40–60 ms. + An octave jump needs longer still. Inside a note, the tuning holds and does + not retune every hop, unless the user turns on "Follow bends". +- **Let the producer say the note.** Add a third pitch source next to AUDIO and + MIDI: **NOTE** or **KEY**. The producer picks the root (for example F), and + the plugin uses it with no detection at all. Most riddim drops sit on one or + two roots. A scale lock goes in between: detection may only pick notes in the + chosen key. This removes the micro-jumps and most wrong notes. +- **Name controls by outcome, not by mechanism.** Use names like "Sub level" + and "Tighten". Show one big main control per plugin, and move the rest under + an "Advanced" fold. +- **Test on real material.** Collect 5–10 short stems: a growl, an FM bass, a + reese, an 808 with a slide, a formant bass, a layered drop, a noise riser. + Add a tracker metric for note changes per second and the share of time the + tracker is wrong or unsure. Every tracker change must lower it on the stems, + not only pass the saw tests. + +### Per plugin + +- **Anvil.** It does not do what producers expected. The candidates are below; + ask the tester which one they meant. + - (a) They expected a sub *enhancer*: add weight under the existing sound, + not replace it. + - (b) They expected it to follow their growl, and it played wrong sub notes. + The wrong sub notes are the worst failure in the suite. + - (c) They expected a simple "fix my low end" (mono, tight, level), and the + front panel offers Phase, Retrigger, Kick lock, Ghost and Audition. + Fixes: + - Keep the original sub (Keep 100 %) whenever tracking is unsure, and switch + to the clean sine only on a confident note. + - Add the NOTE source with a root picker. + - Add an Enhance mode that adds the sine under the original instead of + replacing it. + - Keep three main controls: Split, Sub level, Mode. Fold the rest. +- **Lathe.** A harmonic EQ is a new idea for most producers. Show the band + centres in Hz on the plot, next to the harmonic numbers. When tracking is + unsure, pass the audio through. +- **Temper.** Producers judge it as distortion first. Floor, Push and Bright + should keep their last confident tuning, or fall back to fixed Hz, instead of + jumping. Consider Floor/Bright with fixed-Hz values as the default, and + tracked values as an option. +- **Knurl.** It needs the cycle clock, so it needs a pitch. NOTE mode and + fade-out on unsure tracking matter most here. +- **Planish.** When tracking is unsure, fall back to fixed band edges (like OTT) + instead of jumping. Crossfade the edges when the note changes. +- **Braze.** It needs a pitch. Use NOTE mode, hold the detune through unsure + stretches, and do not jump. +- **Ballast.** Make **Grid** the default for Parts from. A switch-up lands on + the grid, and Grid needs no tracking. +- **Crucible.** Name a slice by its note only when one note is confident over + most of the slice. Otherwise leave the note out (or write "?"). An optional + song key field avoids enharmonic names that do not fit the key. +- **Forge.** It inherits everything above from the shared tracker. +- **Weld, Quench, Patina.** These use no tracking by default. Weld's display is + dense: lead with Recovered dB and one ALIGN button, and fold the plots. + +### Order + +1. Shared tracker: confidence, stability and hold, plus the stem corpus and + metric. One change in `common-dsp` fixes the flicker in nine plugins. +2. NOTE/KEY pitch source in the shared tracker settings and in each tracked + plugin's header. +3. "Unsure means neutral" fallback in each tracked plugin, Anvil first. +4. Anvil Enhance mode and a reduced front panel. Ask the tester what they + expected first. +5. Front-panel pass on every plugin: a main control, outcome names, and an + Advanced fold. + ## Research findings (2026-11) From the papers in `research/` (local, not committed). Each finding names where