docs(ideas): record producer feedback on note tracking and usability
Producers find most plugins confusing: the note readout flickers on real basses, and Anvil did not do what they expected. Record the causes (one shared fast-reacting tracker behind nine plugins, wrong guesses acted on, DSP-named controls, hidden MIDI routing), principles for the next round and an order of work.
This commit is contained in:
1 parent
d5bdd3e2c7
commit
7c873f2bd0
1 file changed
+119
+119
@@ -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
|
||||
|
||||
Reference in new issue
Block a user