diff --git a/docs/anvil/CHANGELOG.md b/docs/anvil/CHANGELOG.md index b043c89..63e0e9d 100644 --- a/docs/anvil/CHANGELOG.md +++ b/docs/anvil/CHANGELOG.md @@ -1,5 +1,20 @@ # Anvil changelog +## 0.4.0 + +- Add **Mode**: **Replace** swaps the sub as before; **Enhance** keeps the + original sub and adds the sine under it. +- Add **NOTE** as a pitch source: Anvil plays a note you set, and the audio only + starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, Anvil plays the original sub (Enhance: adds nothing) + instead of a guessed note, and the NOTE readout shows **?**. +- The editor opens on a MAIN page with Mode, Split, Sub level, Octave, Ghost, + Keep and Output. **ADVANCED** in the header shows every control and Kick lock. +- Projects from 0.3 load with Replace mode, AUDIO detection, and Key lock off. + ## 0.3.0 - Add Ghost harmonics: **Ghost** and **Ghost from** add the sub's harmonics 2–10 diff --git a/docs/anvil/README.md b/docs/anvil/README.md index f031162..f147fc7 100644 --- a/docs/anvil/README.md +++ b/docs/anvil/README.md @@ -1,6 +1,6 @@ # Anvil -Anvil gives every bass note the same solid sub. Current version **0.3.0**. +Anvil gives every bass note the same solid sub. Current version **0.4.0**. In riddim and dubstep, each switch-up patch brings its own sub: a different level, a different phase, sometimes two layers that cancel. The drop's weight jumps from @@ -20,18 +20,33 @@ redistributed packages. ## Work with it +The editor opens on the **MAIN** page with the controls most drops need. The +**ADVANCED** switch in the header shows every control and the Kick lock panel. + 1. Put Anvil on the bass bus, after the sound design and before the bus compression or clipping. -2. Set **Split** just above the sub. 80–100 Hz suits most riddim basses. -3. Set **Sub level** once. Every patch on the bus now gets this level. -4. Use **Phase** to line the start of each note up with your kick. With - **Retrigger** on, every note starts at this phase. -5. Turn on **Solo sub** to hear only the new sub; the scope shows the original +2. Choose the **Mode**: + - **Replace** swaps the band below Split for the clean sine. Every note gets + the same level and phase. Use it when switch-ups bring different subs. + - **Enhance** keeps your sub as it is and adds the sine under it. Use it when + you like your sub and want more weight, or with **Octave** −1 for a + sub-octave. +3. Set **Split** just above the sub. 80–100 Hz suits most riddim basses. +4. Set **Sub level** once. Every patch on the bus now gets this level. +5. In the header, set **Pitch from**. For growls and FM basses, choose **NOTE** + and set the drop's root. See [Pitch source](../pitch.md). +6. On the ADVANCED page, use **Phase** to line the start of each note up with + your kick. With **Retrigger** on, every note starts at this phase. +7. Turn on **Solo sub** to hear only the new sub; the scope shows the original low band (grey) against the new sub (accent). -6. Turn on **Phone** to check the drop the way phones and laptop speakers play +8. Turn on **Phone** to check the drop the way phones and laptop speakers play it: mono, nothing below 400 Hz. A clean sub vanishes there. If the note disappears with it, raise **Ghost**. +When detection is unsure of the note, Anvil does not guess. In Replace mode it +fades back to your original sub within 15 ms, and in Enhance mode it adds +nothing. The NOTE readout shows **?** meanwhile. + ### Ghost harmonics Phone speakers play almost nothing below 300–500 Hz. A clean 50 Hz sub sends all @@ -100,27 +115,29 @@ Other controls: - **Glide** slides between overlapping notes; 0 jumps. - **Gate** is the input level that counts as a note. Raise it if tails or reverb start new notes. -- **Keep** blends some of the original low band back under the new sub. +- **Keep** blends some of the original low band back under the new sub. It has + no effect in Enhance mode, where the original always stays. - **Snap to semitone** rounds detected pitch. Turn it off for pitch bends and slides. If Knurl is on the bass before the bus, use **MIDI**: Knurl's patterns make detection read notes from C2 upwards an octave low. See [Signal chain](../chain.md). -### Pitch from MIDI +### Pitch source -Detection follows the audio by default. For heavy formant or FM basses where the -fundamental is unclear, select **MIDI** and route the bass's MIDI notes to Anvil. -In FL Studio, set the bass channel's MIDI output port and Anvil's input port to the -same number, or duplicate the notes into a pattern on a channel that feeds Anvil. +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Anvil, and **NOTE** plays a note +you set. Key lock and Follow bends tune the detection. See +[Pitch source](../pitch.md). ## Timing and limits Detection uses 80 ms of lookahead, reported to the host for delay compensation, so each note's pitch is known before its attack leaves the plugin. Pitch range is 25–250 Hz, one voice: chords and layered notes in the sub band are not separated. -Notes shorter than about 15 ms may not be recognised. A pitch move of more than -0.7 semitone that holds for two analysis hops (10 ms) starts a new note. +Notes shorter than about 40 ms may not be recognised. A new pitch must hold +steady for 40 ms to start a new note (80 ms an octave down, 200 ms an octave +up); with Follow bends on, 10 ms. A note ends after 20 ms of silence. The crossover is a 4th-order Linkwitz–Riley pair, so with Keep at 100 % and no note playing, the signal passes with flat magnitude. Stereo above the split is diff --git a/docs/anvil/assets/editor.png b/docs/anvil/assets/editor.png index 4cbdeb9..a4fd138 100644 Binary files a/docs/anvil/assets/editor.png and b/docs/anvil/assets/editor.png differ diff --git a/docs/ballast/CHANGELOG.md b/docs/ballast/CHANGELOG.md index 85dfdcd..b391cae 100644 --- a/docs/ballast/CHANGELOG.md +++ b/docs/ballast/CHANGELOG.md @@ -1,5 +1,13 @@ # Ballast changelog +## 0.2.0 + +- **Parts from** defaults to **Grid**, on quarter notes. Switch-ups land on the + grid, and the grid needs no note detection. Saved projects keep their choice. +- In Notes mode, detection holds its notes: a new pitch must hold for 40 ms to + start a new part, and a note ends after 20 ms of silence. Growls and wobbles + no longer split into many parts. + ## 0.1.0 - Introduce Ballast, a switch-up leveller: every part of a bassline gets one diff --git a/docs/ballast/README.md b/docs/ballast/README.md index 1944c64..3cba828 100644 --- a/docs/ballast/README.md +++ b/docs/ballast/README.md @@ -1,7 +1,7 @@ # Ballast Ballast levels every note or switch-up of a bassline to one loudness, with a -single gain for each. Current version **0.1.0**. +single gain for each. Current version **0.2.0**. Riddim and dubstep basslines change patch every few beats. Patches at the same peak level still differ in how loud they sound, so each switch-up lands at a @@ -21,11 +21,15 @@ design. Keep the font license with redistributed packages. ## Work with it 1. Choose where a part starts with **Parts from**: + - **Grid** (the default): every line of the host's beat grid, from 1 bar to + 1/16, quarter notes at first. Switch-ups land on the grid, and the grid + needs no note detection, so it also catches a patch change on the same + note. - **Notes**: every note start, detected from the audio, or from MIDI notes - sent to the effect (**Notes from**: AUDIO or MIDI). - - **Grid**: every line of the host's beat grid, from 1 bar to 1/16. Use it - when a switch-up changes the patch on the same note: the note tracker does - not see a new note there. + sent to the effect (**Notes from**: AUDIO or MIDI). Use it for basslines + whose parts start off the grid. A note ends after 20 ms of silence, and a + new pitch must hold for 40 ms to start a new part, so growls and wobbles do + not split into many parts. See [Pitch source](../pitch.md). 2. Play the bassline and press **LEARN** just before the switch-up that sits right in the mix. Its loudness becomes the **Target**. You can also set Target by hand. diff --git a/docs/braze/CHANGELOG.md b/docs/braze/CHANGELOG.md index 337726d..7166190 100644 --- a/docs/braze/CHANGELOG.md +++ b/docs/braze/CHANGELOG.md @@ -1,5 +1,17 @@ # Braze changelog +## 0.2.0 + +- Add **NOTE** as a pitch source: Braze follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, Braze keeps the detune of the last sure note, and + the readout shows **?**. +- The editor opens on a MAIN page. **ADVANCED** in the header adds Phase, Gate + and Snap. + ## 0.1.0 - Introduce Braze, a detuned copy of the bass whose beating stays on the tempo diff --git a/docs/braze/README.md b/docs/braze/README.md index 61ab83a..690f656 100644 --- a/docs/braze/README.md +++ b/docs/braze/README.md @@ -1,6 +1,6 @@ # Braze -Braze makes a reese's movement play in time. Current version **0.1.0**. +Braze makes a reese's movement play in time. Current version **0.2.0**. Two layers detuned against each other beat: harmonic k of a note at f0 swells and fades k·f0·(r − 1) times per second, where r is the detune ratio. With a @@ -19,6 +19,9 @@ redistributed packages. ## Work with it +The editor opens on the **MAIN** page with Rate, harmonic, Depth, Low cut, Width +and Output. The **ADVANCED** switch in the header adds Phase, Gate and Snap. + 1. Put Braze on a single bass layer: a plain saw, or a reese whose own detune you have turned down. 2. Pick **Rate**: the note value one beat lasts. 1/8 at 140 BPM is 4.67 beats @@ -29,7 +32,7 @@ redistributed packages. quarter triplets. 4. Set **Depth**. At 100 % the beating goes down to full nulls; 50–70 % keeps the note present. -5. Use **Phase** to move where the beat peaks. At 0° all harmonics peak +5. On the ADVANCED page, use **Phase** to move where the beat peaks. At 0° all harmonics peak together on every beat of the chosen harmonic's cycle. The display shows one bar: a row per harmonic with the level it gets from the @@ -47,6 +50,14 @@ Other controls: - **Snap to semitone** rounds the detected pitch. Leave it off on detuned or bent notes: the copy jumps by one period of the pitch in use. +### Pitch source + +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Braze, and **NOTE** uses a note +you set. For heavy FM, formant or noise basses, NOTE with the drop's root is the +safest choice. Key lock and Follow bends tune the detection. While detection is unsure of the note, Braze keeps the detune of the last sure note and the readout shows **?**. See +[Pitch source](../pitch.md). + ### How the detune is made The copy is the bass read from a delay line. Its delay falls by one period of @@ -72,5 +83,5 @@ Noise, chords and the attack of a note are not periodic, so the copy's jumps are heard there as a short blur. Before the first note, the copy assumes 55 Hz. Braze changes the waveform in time, so pitch detection after it can be less -sure: put tracked plugins before Braze, or use MIDI. See +sure: put tracked plugins before Braze, or use MIDI or NOTE. See [Signal chain](../chain.md). diff --git a/docs/braze/assets/editor.png b/docs/braze/assets/editor.png index 50d0a2e..0aae7a3 100644 Binary files a/docs/braze/assets/editor.png and b/docs/braze/assets/editor.png differ diff --git a/docs/crucible/CHANGELOG.md b/docs/crucible/CHANGELOG.md index c655039..bdaa407 100644 --- a/docs/crucible/CHANGELOG.md +++ b/docs/crucible/CHANGELOG.md @@ -1,5 +1,13 @@ # Crucible changelog +## 0.4.0 + +- A slice is named by a note only when at least three in five pitch reads over + its body agree on it. Growls, slides and noise are saved without a note + instead of with a wrong one. +- Add the song **Key**: slice names use its spelling, such as Ab instead of G#. + Without a key, names use sharps as before. + ## 0.3.0 - **Keep takes** (on by default) saves every capture's loop to a `takes` diff --git a/docs/crucible/README.md b/docs/crucible/README.md index 4bbe3f3..eceb952 100644 --- a/docs/crucible/README.md +++ b/docs/crucible/README.md @@ -1,7 +1,7 @@ # Crucible Crucible melts the bars you just played into ready-to-use samples. Current version -**0.3.0**. +**0.4.0**. Resampling is the core loop of riddim sound design: bounce, open in Edison, chop, trim, declick, normalise, find the key, name, save, load into a sampler. Crucible @@ -33,7 +33,11 @@ Each export creates a folder named after the date, time and tempo, holding: - `loop.wav`: the whole take, for Slicex or Edison; - `s01_F1.wav`, `s02_G#1.wav`, …: one file per slice, named by its detected root - note. The root is also stored in the file's sampler chunk; + note. The root is also stored in the file's sampler chunk. A slice gets a + note only when most of it holds one clear pitch; a growl, a slide or noise is + saved as `s03.wav`, because a wrong note name is worse than none. Choose the + song's **Key** to spell the names in it: in F minor a slice is `s02_Ab1.wav`, + not `s02_G#1.wav`. Without a key, names use sharps; - `wavetable.wav` when **Wavetable** is on: up to 256 single-cycle frames of 2048 samples from the selected slice. Each frame starts on a rising zero crossing, so frames morph without phase jumps. Serum reads the frame size from the file; in @@ -58,6 +62,8 @@ default), every capture's loop is also written at once to or a crash loses nothing. Existing files are never overwritten. Bar alignment follows the host's song position and time signature. Root notes are -detected between 35 Hz and 1 kHz. Unpitched slices, such as drums or noise, get -no note in their name. Transient slicing finds hits that rise out of quieter +detected between 35 Hz and 1 kHz. The pitch is read at up to 12 points across +each slice after its attack; at least three reads in five must be clear and on +the same note. Unpitched slices, such as drums +or noise, get no note in their name. Transient slicing finds hits that rise out of quieter audio; for legato basses, slice on the grid. diff --git a/docs/crucible/assets/editor.png b/docs/crucible/assets/editor.png index 25ac6b0..984e554 100644 Binary files a/docs/crucible/assets/editor.png and b/docs/crucible/assets/editor.png differ diff --git a/docs/forge/CHANGELOG.md b/docs/forge/CHANGELOG.md index b61ec90..a85dde3 100644 --- a/docs/forge/CHANGELOG.md +++ b/docs/forge/CHANGELOG.md @@ -1,5 +1,18 @@ # Forge changelog +## 0.2.0 + +- Add **NOTE** as a pitch source: Forge follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- All modules share the pitch source, Key lock and Follow bends. +- When detection is unsure, each module acts as its standalone plugin: Lathe + passes the audio, Temper keeps its tuning, Knurl fades its texture out. +- Each module page opens on its MAIN controls. **ADVANCED** in the header shows + every control on all pages. + ## 0.1.0 - Introduce Forge, one tracked channel strip: Lathe, Temper and Knurl behind a diff --git a/docs/forge/README.md b/docs/forge/README.md index 1531eed..0eb0ea7 100644 --- a/docs/forge/README.md +++ b/docs/forge/README.md @@ -1,7 +1,7 @@ # Forge Forge is one tracked channel strip: Lathe, Temper and Knurl run behind a single -note tracker, in the order you choose. Current version **0.1.0**. +note tracker, in the order you choose. Current version **0.2.0**. Each of the three plugins detects the played note itself. In a row, their lookaheads add up (Lathe 67 ms, Temper 68 ms, Knurl 71 ms: more than 200 ms), @@ -23,20 +23,27 @@ synth. Keep the font license with redistributed packages. ## Work with it 1. Choose **Pitch from** in the header: **AUDIO** detects the note from the - input; **MIDI** follows MIDI notes sent to the effect. All modules use it. + input; **MIDI** follows MIDI notes sent to the effect; **NOTE** uses a note + you set. All modules use it, with the same Key lock and Follow bends. See + [Pitch source](../pitch.md). 2. The **Chain** row shows the modules in processing order. Click a module's name to edit it below; **ON** switches it on or off. The button between two modules swaps them. The default order is Lathe, Temper, Knurl, as in the standalone chain. 3. Each module's page is its standalone editor: [Lathe](../lathe/README.md), [Temper](../temper/README.md) and [Knurl](../knurl/README.md) explain the - controls. Temper's **AUTO GAIN** sits in the Chain row while its page is - open. + controls. Each page opens on its MAIN controls; the **ADVANCED** switch in + the header shows every control on all pages. Temper's **AUTO GAIN** sits in + the Chain row while its page is open. 4. The **Gate** knob on every page is the one shared tracker gate: turning it on one page turns it on all. **Bypass** in the header crossfades the whole strip to the delayed input. +While detection is unsure of the note, each module does what its standalone +plugin does: Lathe passes the audio, Temper keeps the last sure tuning, and +Knurl fades its texture out. + ## How it works The tracker reads the strip's input, and the audio is delayed by its lookahead diff --git a/docs/forge/assets/editor.png b/docs/forge/assets/editor.png index 1885888..c8defa2 100644 Binary files a/docs/forge/assets/editor.png and b/docs/forge/assets/editor.png differ diff --git a/docs/ideas.md b/docs/ideas.md index 701803d..a59cde0 100644 --- a/docs/ideas.md +++ b/docs/ideas.md @@ -210,6 +210,44 @@ in Patina 0.5.0. 5. Front-panel pass on every plugin: a main control, outcome names, and an Advanced fold. +### Status (2026-11-06) + +Done in Anvil 0.4.0, Lathe 0.3.0, Temper 0.3.0, Knurl 0.3.0, Planish 0.2.0, +Braze 0.2.0, Ballast 0.2.0, Forge 0.2.0, Crucible 0.4.0 and Weld 0.4.0. Not +tested in FL Studio yet, and the tester has not been asked which Anvil they +expected. + +1. Done. The tracker needs a steady pitch for 40 ms to start a note (80 ms an + octave down, 200 ms up), holds within a quarter semitone, ends a note after + 20 ms of silence, and reports unsure after about 40 ms of disagreeing reads. + Follow bends keeps the old fast behaviour. The corpus is synthetic + (`common-dsp/src/stems.rs`, `examples/tracker_report.rs`): extra note starts + per second on formant, wobble and reese fell from 28.5, 11.8 and 1.3 to 0. + Wobble is still unsure 37 % of the time and the hard growl 4.5 %. +2. Done: NOTE source with a note picker, Key lock (minor, major, root only) and + Follow bends, shared through `common-params`. Ballast has no NOTE: its parts + need note starts from the audio or MIDI. +3. Done. Anvil plays the original sub, Lathe passes the audio, Knurl fades out, + Temper, Planish and Braze hold the last sure note. Planish slides its edges + over 6 ms on a new note. Crucible names slices only on a sure note and + spells them for a song key. +4. Done: Replace / Enhance mode, and a MAIN page with Mode, Split and Sub level. +5. Done for Anvil, Lathe, Temper, Knurl, Planish, Braze, Forge and Weld: a MAIN + page and an ADVANCED switch. Lathe labels harmonics in Hz. Ballast defaults + to Grid. + +Still open: + +- Real stems. Score the tracker on 5–10 real drops with `tracker_report` and + tune on those, not only on the synthetic corpus. +- Outcome names. Controls keep their old names; only the pages changed. +- Temper with fixed-Hz Floor and Bright as the default. +- Weld's single ALIGN button. +- Panel pass for Quench, Patina, Crucible, Rivet and Ballast. Their panels were + already short, so they were left as they are. +- `tools/editor-check` has a clippy `chunks_exact` lint outside the plugin + checks. + ## Research findings (2026-11) From the papers in `research/` (local, not committed). Each finding names where @@ -281,7 +319,8 @@ it goes in the suite. They are starting points to test by ear, not rules. Replaces the band below a split frequency with a clean mono sine that follows the bass pitch, at one level and one start phase for every note. Pitch comes -from detection with 80 ms lookahead or from MIDI. See [Anvil](anvil/README.md). +from detection with 80 ms lookahead, from MIDI, or from a set note. Enhance +mode adds the sine under the original sub instead. See [Anvil](anvil/README.md). ### Crucible — resampler (problem 3) diff --git a/docs/knurl/CHANGELOG.md b/docs/knurl/CHANGELOG.md index 6a9f8e2..0ee8ae6 100644 --- a/docs/knurl/CHANGELOG.md +++ b/docs/knurl/CHANGELOG.md @@ -1,7 +1,16 @@ # Knurl changelog -## Unreleased +## 0.3.0 +- Add **NOTE** as a pitch source: Knurl follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, Knurl fades its texture out, and the readout shows + **?**. +- The editor opens on a MAIN page. **ADVANCED** in the header adds Edge, the + Grit burst's Tone, Position and Length, and Gate. - The engine is now a module that also runs inside Forge. The sound is unchanged; the latency is one sample longer. diff --git a/docs/knurl/README.md b/docs/knurl/README.md index 4c1acba..7f49d26 100644 --- a/docs/knurl/README.md +++ b/docs/knurl/README.md @@ -1,7 +1,7 @@ # Knurl Knurl gives every cycle of the note its own level, timing and grit. Current -version **0.2.0**. +version **0.3.0**. Knurling presses a ridged pattern into metal. Riddim and dubstep basses get their character the same way, from surface texture: rattle, growl, fry, grit. Usually @@ -22,6 +22,10 @@ redistributed packages. ## Work with it +The editor opens on the **MAIN** page with the pattern, Level, Time, Grit, Mix +and Output. The **ADVANCED** switch in the header adds Edge, the Grit burst's +Tone, Position and Length, and Gate. + 1. Play the bass. The note readout shows what Knurl tracks; the scope overlays the last eight cycles of the output, so the texture is visible cycle by cycle. 2. Choose a **Pattern**. The pattern sets the level of each cycle and repeats: @@ -50,13 +54,16 @@ note, so identical notes sound identical, which keeps a riddim line tight. **Mix** blends with the delayed dry signal; **Output** trims the level. -### Pitch from MIDI +### Pitch source -For basses whose fundamental is unclear (heavy FM, formant or noise patches), -select **MIDI** and route the bass's MIDI notes to Knurl. In FL Studio, set the -bass channel's MIDI output port and Knurl's input port to the same number. -**Gate** sets the input level that counts as a note in AUDIO mode; **Snap to -semitone** rounds the detected pitch (turn it off for slides). +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Knurl, and **NOTE** uses a note +you set. For heavy FM, formant or noise basses, NOTE with the drop's root is the +safest choice. Key lock and Follow bends tune the detection. While detection is unsure of the note, Knurl fades its texture out, and the readout shows **?**. See +[Pitch source](../pitch.md). + +**Gate** (ADVANCED page) sets the input level that counts as a note in AUDIO +mode; **Snap to semitone** rounds the detected pitch (turn it off for slides). ## Timing and limits diff --git a/docs/knurl/assets/editor.png b/docs/knurl/assets/editor.png index ee529b5..8a4c158 100644 Binary files a/docs/knurl/assets/editor.png and b/docs/knurl/assets/editor.png differ diff --git a/docs/lathe/CHANGELOG.md b/docs/lathe/CHANGELOG.md index b61fd3b..846cb11 100644 --- a/docs/lathe/CHANGELOG.md +++ b/docs/lathe/CHANGELOG.md @@ -1,5 +1,18 @@ # Lathe changelog +## 0.3.0 + +- Add **NOTE** as a pitch source: Lathe follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, Lathe passes the audio unchanged instead of cutting + a guessed note's harmonics, and the readout shows **?**. +- The harmonic bars show where harmonics 1, 2, 4, 8, 16 and 32 sit in Hz. +- The editor opens on a MAIN page. **ADVANCED** in the header adds Harmonics, + Smooth, Gate and Snap. + ## 0.2.0 - Change the CLAP ID to `io.narl.bass-foundry.lathe`. Hosts see this as a new diff --git a/docs/lathe/README.md b/docs/lathe/README.md index e99a469..53fc7c6 100644 --- a/docs/lathe/README.md +++ b/docs/lathe/README.md @@ -1,7 +1,7 @@ # Lathe Lathe is an EQ whose bands sit on the harmonics of the note being played. -Current version **0.2.0**. +Current version **0.3.0**. A normal EQ works in fixed frequencies. A cut at 130 Hz takes out the 3rd harmonic of an F1 bass, the 2nd of a C2, and the fundamental of a C3, so the @@ -20,8 +20,13 @@ processing. Keep the font license with redistributed packages. ## Work with it +The editor opens on the **MAIN** page with the bars, the macros and Width. +The **ADVANCED** switch in the header adds Harmonics, Smooth, Gate and Snap. + 1. Play the bass. The note readout shows what Lathe tracks; the lower strip of the editor shows each harmonic's level going in (grey) and coming out (pink). + While a note plays, harmonics 1, 2, 4, 8, 16 and 32 also show where they + sit in Hz. 2. Draw gains on the harmonic bars. Drag across bars to paint a shape; Shift-drag for fine steps; double-click a bar to reset it. 3. Use the macros for the whole series: @@ -34,7 +39,7 @@ processing. Keep the font license with redistributed packages. 4. **Width** sets every band's bandwidth as a share of the harmonic spacing. Narrow bands touch only the harmonic; wide bands also move its surroundings. -Other controls: +Other controls (Harmonics, Smooth, Gate and Snap on the ADVANCED page): - **Harmonics** is how many harmonics are shaped (8–32). Higher harmonics pass unchanged. @@ -50,11 +55,13 @@ Other controls: The drawn gains are saved with the project but are not automation parameters; the macros are. -### Pitch from MIDI +### Pitch source -For basses whose fundamental is unclear (heavy FM, formant or noise patches), -select **MIDI** and route the bass's MIDI notes to Lathe. In FL Studio, set the -bass channel's MIDI output port and Lathe's input port to the same number. +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Lathe, and **NOTE** uses a note +you set. For heavy FM, formant or noise basses, NOTE with the drop's root is the +safest choice. Key lock and Follow bends tune the detection. While detection is unsure of the note, Lathe passes the audio unchanged and the readout shows **?**. See +[Pitch source](../pitch.md). ## Timing and limits diff --git a/docs/lathe/assets/editor.png b/docs/lathe/assets/editor.png index fb39800..6815968 100644 Binary files a/docs/lathe/assets/editor.png and b/docs/lathe/assets/editor.png differ diff --git a/docs/pitch.md b/docs/pitch.md new file mode 100644 index 0000000..3c6cb56 --- /dev/null +++ b/docs/pitch.md @@ -0,0 +1,62 @@ +# Pitch source in the tracked plugins + +Anvil, Lathe, Temper, Knurl, Planish, Braze and Forge follow the note the bass +plays. **Pitch from** in each header says where that note comes from. + +- **AUDIO** detects the note from the audio. This is the default. +- **MIDI** takes the notes from MIDI input. In FL Studio, set the bass channel's + MIDI output port and the effect's input port to the same number. +- **NOTE** uses a note you set, for example F1. The audio only starts and stops + notes; nothing is detected. Most riddim drops sit on one or two roots, so this + is the safest choice for growls, FM basses and anything detection struggles + with. Click the note button next to NOTE to pick the note and its octave. + +## When detection is unsure + +Real basses are often not one clear note: FM growls, formant sweeps, detuned +reeses, layers and noise. Detection therefore stays put: + +- A new note needs a steady pitch for 40 ms. A jump down an octave needs 80 ms + and a jump up an octave 200 ms, because a misread octave is the commonest + error. +- Inside a note, the tuning only moves when the pitch drifts more than a quarter + of a semitone for good. +- When the pitch keeps reading differently from the note (about 40 ms of + disagreeing reads, or 400 ms without any clear read), the note turns + **unsure**. The NOTE readout then shows **?**. + +While the note is unsure, a plugin never acts on a guess: + +| Plugin | While unsure | +| --- | --- | +| Anvil | Plays your original sub instead of the sine (Enhance: adds nothing) | +| Lathe | Passes the audio unchanged | +| Knurl | Fades its texture out | +| Temper, Planish, Braze | Keep the tuning of the last sure note | +| Forge | Each module as above | + +## Key lock and Follow bends + +With AUDIO selected, the button next to the switch opens two options: + +- **Key lock** lets detection pick only notes of a key: **Minor**, **Major**, + or **Root only** (any octave of the root, so detection only picks the + octave). Pick the root below. A drop in F minor with Key lock on F minor can + no longer read an F♯. +- **Follow bends** retunes on every bend and vibrato and switches notes after + 10 ms, as the plugins did before. It follows slides and 808 glides closely, + but it flickers on growls. Leave it off unless the bass is clean and bends a + lot. + +## Measuring detection on your own stems + +`cargo run -p common-dsp --release --example tracker_report` scores the +detection on a set of synthetic stems (growls, wobble, reese, formant bass, 808 +slide, layered drop, noise riser). Pass WAV files to score real stems: + +```text +cargo run -p common-dsp --release --example tracker_report -- --note F1 drop.wav +``` + +It prints note starts per second, the share of time with a wrong sure note, and +the share of time detection was unsure. diff --git a/docs/planish/CHANGELOG.md b/docs/planish/CHANGELOG.md index e593475..f9097e0 100644 --- a/docs/planish/CHANGELOG.md +++ b/docs/planish/CHANGELOG.md @@ -1,5 +1,18 @@ # Planish changelog +## 0.2.0 + +- Add **NOTE** as a pitch source: Planish follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, the band edges hold on the last sure note, and the + readout shows **?**. On a new note the edges slide over 6 ms instead of + jumping. +- The editor opens on a MAIN page. **ADVANCED** in the header adds the band + gains, Smooth, Gate and Snap. + ## 0.1.0 - Introduce Planish, upward and downward compression in four bands whose edges diff --git a/docs/planish/README.md b/docs/planish/README.md index a07fb43..17d19ca 100644 --- a/docs/planish/README.md +++ b/docs/planish/README.md @@ -1,7 +1,7 @@ # Planish Planish is upward and downward compression (OTT) in four bands whose edges are -harmonic numbers of the played note. Current version **0.1.0**. +harmonic numbers of the played note. Current version **0.2.0**. Planishing hammers a metal surface smooth and even. OTT does the same to a bass: it pushes loud bands down and lifts quiet ones, and it is on almost every riddim @@ -23,6 +23,10 @@ license with redistributed packages. ## Work with it +The editor opens on the **MAIN** page with the split, Drive, Depth, Upward, +Downward, Time and Output. The **ADVANCED** switch in the header adds the band +gains, Smooth, Gate and Snap. + 1. Play the bass. The note readout shows what Planish tracks. The ruler at the top shows harmonics 1–64 and the four bands; the columns below show each band's level (steel) and gain (pink for a cut, blue for a lift). @@ -42,20 +46,23 @@ license with redistributed packages. - **Time** scales every attack and release. Lower bands are slower: at 100 %, attack is 30, 15, 8 and 4 ms and release 200, 160, 120 and 90 ms from band 1 to band 4. -4. **Band 1–4** set each band's gain after its compressor. Like the +4. On the ADVANCED page, **Band 1–4** set each band's gain after its compressor. Like the compression, they are scaled by Depth. **Output** trims the level. **Bypass** crossfades to the delayed dry signal. -### Pitch from MIDI +### Pitch source -For basses whose fundamental is unclear (heavy FM, formant or noise patches), -and when Planish comes after Knurl, select **MIDI** and route the bass's MIDI -notes to Planish. In FL Studio, set the bass channel's MIDI output port and -Planish's input port to the same number. **Gate** sets the input level that -counts as a note in AUDIO mode. **Snap to semitone** rounds the detected pitch; -it is off by default, because the level is measured over one period of the -pitch in use, and a detuned patch fits its real period better. +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Planish, and **NOTE** uses a note +you set. For heavy FM, formant or noise basses, NOTE with the drop's root is the +safest choice. Key lock and Follow bends tune the detection. While detection is unsure of the note, the band edges hold on the last sure note and the readout shows **?**. See +[Pitch source](../pitch.md). + +**Gate** (ADVANCED page) sets the input level that counts as a note in AUDIO +mode. **Snap to semitone** rounds the detected pitch; it is off by default, +because the level is measured over one period of the pitch in use, and a +detuned patch fits its real period better. ## Measured @@ -73,7 +80,8 @@ Planish delays the audio by about 67 ms of pitch-detection lookahead and reports it to the host for delay compensation, so the edges are on the new note when its attack leaves the plugin. Pitch range is 30–500 Hz, one note at a time. Before the first note the edges sit on 55 Hz; between notes they hold the last -note. +note. On a new note the edges slide to it over 6 ms, so the crossovers do not +click. An edge is a slope, not a wall. The crossovers are 24 dB per octave, so the harmonics next to an edge partly reach the next band, by the same amount on diff --git a/docs/planish/assets/editor.png b/docs/planish/assets/editor.png index 7783fe1..55eaad3 100644 Binary files a/docs/planish/assets/editor.png and b/docs/planish/assets/editor.png differ diff --git a/docs/releases.md b/docs/releases.md index a76f0de..f2104ab 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -9,17 +9,17 @@ workflows are in `.gitea/workflows/`. A plugin's version is the `version` in | --- | --- | --- | | Rivet | `rivet-v0.5.0` | `rivet-windows-x86_64-0.5.0.zip` | | Patina | `patina-v0.5.0` | `patina-windows-x86_64-0.5.0.zip` | -| Anvil | `anvil-v0.3.0` | `anvil-windows-x86_64-0.3.0.zip` | -| Crucible | `crucible-v0.3.0` | `crucible-windows-x86_64-0.3.0.zip` | -| Lathe | `lathe-v0.2.0` | `lathe-windows-x86_64-0.2.0.zip` | -| Temper | `temper-v0.2.0` | `temper-windows-x86_64-0.2.0.zip` | -| Weld | `weld-v0.3.0` | `weld-windows-x86_64-0.3.0.zip` | -| Knurl | `knurl-v0.2.0` | `knurl-windows-x86_64-0.2.0.zip` | -| Planish | `planish-v0.1.0` | `planish-windows-x86_64-0.1.0.zip` | -| Braze | `braze-v0.1.0` | `braze-windows-x86_64-0.1.0.zip` | +| Anvil | `anvil-v0.4.0` | `anvil-windows-x86_64-0.4.0.zip` | +| Crucible | `crucible-v0.4.0` | `crucible-windows-x86_64-0.4.0.zip` | +| Lathe | `lathe-v0.3.0` | `lathe-windows-x86_64-0.3.0.zip` | +| Temper | `temper-v0.3.0` | `temper-windows-x86_64-0.3.0.zip` | +| Weld | `weld-v0.4.0` | `weld-windows-x86_64-0.4.0.zip` | +| Knurl | `knurl-v0.3.0` | `knurl-windows-x86_64-0.3.0.zip` | +| Planish | `planish-v0.2.0` | `planish-windows-x86_64-0.2.0.zip` | +| Braze | `braze-v0.2.0` | `braze-windows-x86_64-0.2.0.zip` | | Quench | `quench-v0.1.0` | `quench-windows-x86_64-0.1.0.zip` | -| Ballast | `ballast-v0.1.0` | `ballast-windows-x86_64-0.1.0.zip` | -| Forge | `forge-v0.1.0` | `forge-windows-x86_64-0.1.0.zip` | +| Ballast | `ballast-v0.2.0` | `ballast-windows-x86_64-0.2.0.zip` | +| Forge | `forge-v0.2.0` | `forge-windows-x86_64-0.2.0.zip` | ## Make a release diff --git a/docs/temper/CHANGELOG.md b/docs/temper/CHANGELOG.md index 6ecb0c6..c8eb27f 100644 --- a/docs/temper/CHANGELOG.md +++ b/docs/temper/CHANGELOG.md @@ -1,5 +1,17 @@ # Temper changelog +## 0.3.0 + +- Add **NOTE** as a pitch source: Temper follows a note you set, and the audio + only starts and stops it. Add Key lock and Follow bends for AUDIO detection. +- Detection holds its notes: a new note needs a steady pitch for 40 ms, octave + jumps need 80 ms down and 200 ms up. Growls, wobbles and formant basses no + longer flicker between notes. Follow bends brings back the old fast behaviour. +- When detection is unsure, Temper keeps the tuning of the last sure note, and + the readout shows **?**. +- The editor opens on a MAIN page. **ADVANCED** in the header adds Push at, + Floor, Bright, Normalize and Gate. + ## 0.2.0 - Change the CLAP ID to `io.narl.bass-foundry.temper`. Hosts see this as a new diff --git a/docs/temper/README.md b/docs/temper/README.md index f3a3ed5..08e275f 100644 --- a/docs/temper/README.md +++ b/docs/temper/README.md @@ -1,6 +1,6 @@ # Temper -Temper is a distortion that drives every note the same. Current version **0.2.0**. +Temper is a distortion that drives every note the same. Current version **0.3.0**. A distortion with a fixed tone filter acts differently on each note: a lowpass at 2 kHz lets through 45 harmonics of an F1 but only 22 of an F2, and @@ -20,6 +20,10 @@ with redistributed packages. ## Work with it +The editor opens on the **MAIN** page with Curve, Drive, Bias, Push, Mix and +Output. The **ADVANCED** switch in the header adds Push at, Floor, Bright, +Normalize and Gate. + 1. Choose a **Curve**: - **Soft**: tanh, smooth and rounded. - **Hard**: clipping with a narrow knee, dense and square-like. @@ -47,11 +51,13 @@ Other controls: - **Gate** is the input level that counts as a note. - **Mix** blends with the delayed dry signal; **Output** trims the level. -### Pitch from MIDI +### Pitch source -Select **MIDI** and route the bass's MIDI notes to Temper when detection -struggles. In FL Studio, set the bass channel's MIDI output port and Temper's -input port to the same number. +**Pitch from** in the header chooses where the note comes from: **AUDIO** +detects it, **MIDI** follows MIDI notes sent to Temper, and **NOTE** uses a note +you set. For heavy FM, formant or noise basses, NOTE with the drop's root is the +safest choice. Key lock and Follow bends tune the detection. While detection is unsure of the note, Temper keeps the tuning of the last sure note and the readout shows **?**. See +[Pitch source](../pitch.md). ## Timing and limits diff --git a/docs/temper/assets/editor.png b/docs/temper/assets/editor.png index f17ddbb..5504d9d 100644 Binary files a/docs/temper/assets/editor.png and b/docs/temper/assets/editor.png differ diff --git a/docs/weld/CHANGELOG.md b/docs/weld/CHANGELOG.md index 99f7f9b..9f5a685 100644 --- a/docs/weld/CHANGELOG.md +++ b/docs/weld/CHANGELOG.md @@ -1,5 +1,12 @@ # Weld changelog +## 0.4.0 + +- The editor opens on a MAIN page with Recovered, the band plot, Mode, + Response, Output and the time offset. **ADVANCED** in the header adds the + phase plot, Sections, Low, High and Gate. Sound and saved settings do not + change. + ## 0.3.0 - Show the **delay spread**: how much the alignment's group delay changes diff --git a/docs/weld/README.md b/docs/weld/README.md index c448002..ac1b01e 100644 --- a/docs/weld/README.md +++ b/docs/weld/README.md @@ -1,7 +1,7 @@ # Weld Weld fuses two bass layers so they add up instead of cancelling. Current version -**0.3.0**. +**0.4.0**. Bass patches are layered: a sub, one or more mid growls, a top. Where the layers overlap in the mids, they partly cancel. The causes are a polarity difference, a @@ -37,6 +37,10 @@ plugins. Keep the font license with redistributed packages. ## Work with it +The editor opens on the **MAIN** page: Recovered, the band plot, Mode, +Response, Output and the time offset. The **ADVANCED** switch in the header adds +the phase plot, Sections, Low, High and Gate. + 1. Leave **Mode** on **FOLLOW** and play the part where both layers sound. After a second or two, Weld shows its alignment: polarity, and the allpass sections with their frequency and Q. @@ -47,7 +51,7 @@ plugins. Keep the font license with redistributed packages. - The upper plot shows each band against a perfectly aligned sum (0 dB). Red is what the unprocessed sum loses to cancellation; pink is the part Weld wins back. The white line is the level with Weld. - - The lower plot shows the phase of this layer against the other one, before + - On the ADVANCED page, the lower plot shows the phase of this layer against the other one, before (grey) and after (pink), and Weld's own phase curve (blue). After alignment the pink line sits near 0°. - **Delay spread** under the sections is how much Weld's delay changes diff --git a/docs/weld/assets/editor.png b/docs/weld/assets/editor.png index c19e694..46dc677 100644 Binary files a/docs/weld/assets/editor.png and b/docs/weld/assets/editor.png differ diff --git a/plugins/anvil/plugin/Cargo.lock b/plugins/anvil/plugin/Cargo.lock index 2edb8c3..6bb0c70 100644 --- a/plugins/anvil/plugin/Cargo.lock +++ b/plugins/anvil/plugin/Cargo.lock @@ -72,7 +72,7 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "anvil" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anvil-core", "anvil-ui", diff --git a/plugins/anvil/plugin/Cargo.toml b/plugins/anvil/plugin/Cargo.toml index 8b0441b..59fb168 100644 --- a/plugins/anvil/plugin/Cargo.toml +++ b/plugins/anvil/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "anvil" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "ISC" diff --git a/plugins/anvil/ui/src/lib.rs b/plugins/anvil/ui/src/lib.rs index 569caef..a960228 100644 --- a/plugins/anvil/ui/src/lib.rs +++ b/plugins/anvil/ui/src/lib.rs @@ -338,7 +338,7 @@ fn main_controls(ui: &mut egui::Ui, settings: &mut Settings, state: &mut State) } Mode::Enhance => { "Your sub stays as it is. A clean sine on the played note is added \ - under it. Try Octave −1 in Advanced for a sub-octave." + under it. Try Octave −1 for a sub-octave." } }; ui.label(RichText::new(text).size(13.).color(MUTED)); diff --git a/plugins/ballast/plugin/Cargo.lock b/plugins/ballast/plugin/Cargo.lock index 30f613d..044de4a 100644 --- a/plugins/ballast/plugin/Cargo.lock +++ b/plugins/ballast/plugin/Cargo.lock @@ -140,7 +140,7 @@ dependencies = [ [[package]] name = "ballast" -version = "0.1.0" +version = "0.2.0" dependencies = [ "ballast-core", "ballast-ui", diff --git a/plugins/ballast/plugin/Cargo.toml b/plugins/ballast/plugin/Cargo.toml index fd108a5..2bd119e 100644 --- a/plugins/ballast/plugin/Cargo.toml +++ b/plugins/ballast/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ballast" -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "ISC" diff --git a/plugins/braze/plugin/Cargo.lock b/plugins/braze/plugin/Cargo.lock index 1b15f99..79815aa 100644 --- a/plugins/braze/plugin/Cargo.lock +++ b/plugins/braze/plugin/Cargo.lock @@ -184,7 +184,7 @@ dependencies = [ [[package]] name = "braze" -version = "0.1.0" +version = "0.2.0" dependencies = [ "braze-core", "braze-ui", diff --git a/plugins/braze/plugin/Cargo.toml b/plugins/braze/plugin/Cargo.toml index 22985be..41c2dc5 100644 --- a/plugins/braze/plugin/Cargo.toml +++ b/plugins/braze/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "braze" -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "ISC" diff --git a/plugins/crucible/plugin/Cargo.lock b/plugins/crucible/plugin/Cargo.lock index 4b1a21d..447a972 100644 --- a/plugins/crucible/plugin/Cargo.lock +++ b/plugins/crucible/plugin/Cargo.lock @@ -454,7 +454,7 @@ checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crucible" -version = "0.3.0" +version = "0.4.0" dependencies = [ "clap-sys", "crucible-core", diff --git a/plugins/crucible/plugin/Cargo.toml b/plugins/crucible/plugin/Cargo.toml index 4e1679b..7f5da32 100644 --- a/plugins/crucible/plugin/Cargo.toml +++ b/plugins/crucible/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crucible" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "ISC" diff --git a/plugins/forge/plugin/Cargo.lock b/plugins/forge/plugin/Cargo.lock index 7b2997d..c0e1883 100644 --- a/plugins/forge/plugin/Cargo.lock +++ b/plugins/forge/plugin/Cargo.lock @@ -655,7 +655,7 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "forge" -version = "0.1.0" +version = "0.2.0" dependencies = [ "clap-sys", "common-params", diff --git a/plugins/forge/plugin/Cargo.toml b/plugins/forge/plugin/Cargo.toml index 443041b..d8185b6 100644 --- a/plugins/forge/plugin/Cargo.toml +++ b/plugins/forge/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "forge" -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "ISC" diff --git a/plugins/knurl/plugin/Cargo.lock b/plugins/knurl/plugin/Cargo.lock index a87b512..3942665 100644 --- a/plugins/knurl/plugin/Cargo.lock +++ b/plugins/knurl/plugin/Cargo.lock @@ -873,7 +873,7 @@ dependencies = [ [[package]] name = "knurl" -version = "0.2.0" +version = "0.3.0" dependencies = [ "clap-sys", "common-params", diff --git a/plugins/knurl/plugin/Cargo.toml b/plugins/knurl/plugin/Cargo.toml index 1091e80..59364df 100644 --- a/plugins/knurl/plugin/Cargo.toml +++ b/plugins/knurl/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "knurl" -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "ISC" diff --git a/plugins/lathe/plugin/Cargo.lock b/plugins/lathe/plugin/Cargo.lock index 30594ff..5416b5d 100644 --- a/plugins/lathe/plugin/Cargo.lock +++ b/plugins/lathe/plugin/Cargo.lock @@ -873,7 +873,7 @@ dependencies = [ [[package]] name = "lathe" -version = "0.2.0" +version = "0.3.0" dependencies = [ "clap-sys", "common-params", diff --git a/plugins/lathe/plugin/Cargo.toml b/plugins/lathe/plugin/Cargo.toml index 06b8027..fbedec2 100644 --- a/plugins/lathe/plugin/Cargo.toml +++ b/plugins/lathe/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lathe" -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "ISC" diff --git a/plugins/planish/plugin/Cargo.lock b/plugins/planish/plugin/Cargo.lock index e9f42b8..954dbc0 100644 --- a/plugins/planish/plugin/Cargo.lock +++ b/plugins/planish/plugin/Cargo.lock @@ -1452,7 +1452,7 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "planish" -version = "0.1.0" +version = "0.2.0" dependencies = [ "clap-sys", "common-params", diff --git a/plugins/planish/plugin/Cargo.toml b/plugins/planish/plugin/Cargo.toml index 0a064ad..33fde90 100644 --- a/plugins/planish/plugin/Cargo.toml +++ b/plugins/planish/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "planish" -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "ISC" diff --git a/plugins/temper/plugin/Cargo.lock b/plugins/temper/plugin/Cargo.lock index 3cf5456..6b96374 100644 --- a/plugins/temper/plugin/Cargo.lock +++ b/plugins/temper/plugin/Cargo.lock @@ -1746,7 +1746,7 @@ dependencies = [ [[package]] name = "temper" -version = "0.2.0" +version = "0.3.0" dependencies = [ "clap-sys", "common-params", diff --git a/plugins/temper/plugin/Cargo.toml b/plugins/temper/plugin/Cargo.toml index 51a4410..e2ad076 100644 --- a/plugins/temper/plugin/Cargo.toml +++ b/plugins/temper/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "temper" -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "ISC" diff --git a/plugins/weld/plugin/Cargo.lock b/plugins/weld/plugin/Cargo.lock index 720c87b..58677b5 100644 --- a/plugins/weld/plugin/Cargo.lock +++ b/plugins/weld/plugin/Cargo.lock @@ -2064,7 +2064,7 @@ dependencies = [ [[package]] name = "weld" -version = "0.3.0" +version = "0.4.0" dependencies = [ "clap-sys", "crossbeam-queue", diff --git a/plugins/weld/plugin/Cargo.toml b/plugins/weld/plugin/Cargo.toml index 2273343..6dec276 100644 --- a/plugins/weld/plugin/Cargo.toml +++ b/plugins/weld/plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "weld" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "ISC" diff --git a/website/src/data/plugins.ts b/website/src/data/plugins.ts index 8d495f6..6d61e1b 100644 --- a/website/src/data/plugins.ts +++ b/website/src/data/plugins.ts @@ -85,9 +85,9 @@ const COPY: Record = { problem: 'Every switch-up patch brings its own sub: a different level, a different phase. The weight of the drop jumps from note to note.', points: [ - 'Replaces the band below Split with a clean mono sine that follows the bass pitch.', + 'Replaces the band below Split with a clean mono sine that follows the bass pitch, or adds it under the original sub.', 'The same peak level and the same start phase on every note, so the kick lands the same.', - 'Pitch from detection with 80 ms lookahead, or from MIDI.', + 'Pitch from detection, from MIDI, or from a note you set. When unsure, the original sub plays.', 'Linkwitz–Riley crossover; the stereo above the split is kept.', ], loadOn: 'Bass bus', @@ -103,7 +103,7 @@ const COPY: Record = { 'Always records, so the take you liked is already there when you press Capture.', 'Captures the last 1–16 bars on the FL bar grid.', 'Slices on a grid or on transients, then trims, declicks and normalises.', - 'Exports key-labelled WAVs, the full loop and an optional Serum/Vital wavetable.', + 'Exports note-labelled WAVs, spelled for the song key, the full loop and an optional Serum/Vital wavetable.', ], loadOn: 'End of the chain to resample', latency: 'none', @@ -118,7 +118,7 @@ const COPY: Record = { 'One band on each of harmonics 1–32 of the played note.', '"−12 dB on harmonic 3" stays on harmonic 3, whatever note plays.', 'Odd/even balance, tilt over harmonic number, and Focus between the harmonics.', - 'Pitch from the audio, or from MIDI.', + 'Pitch from the audio, MIDI or a set note. When unsure, the audio passes unchanged.', ], loadOn: 'Bass, after the synth', latency: '≈ 67 ms', @@ -178,7 +178,7 @@ const COPY: Record = { 'Upward and downward compression in four bands.', 'Band edges are harmonic numbers: band 2 holds harmonics 2–4 on every note.', 'Level measured over one period of the note, so heavy settings do not ripple.', - 'Depth, Drive, Time and a gain per band. Pitch from the audio, or from MIDI.', + 'Depth, Drive, Time and a gain per band. Pitch from the audio, MIDI or a set note.', ], loadOn: 'Bass, after the distortion', latency: '≈ 67 ms', @@ -221,7 +221,7 @@ const COPY: Record = { 'Patches at the same peak level still sound louder or quieter, so every switch-up lands at a different loudness and gets hand-set gain or clipping. A compressor evens them out but changes their punch.', points: [ 'One gain per part: nothing moves inside a note or switch-up.', - 'Parts start at note starts, from the audio or MIDI, or on the host’s beat grid.', + 'Parts start on the host’s beat grid, or at note starts from the audio or MIDI.', 'Loudness is K-weighted (BS.1770) over each part’s first 100 ms; Learn takes a reference part.', 'Measure from leaves the sub out of the measurement when Anvil makes it.', ],