feat: add Lathe harmonic EQ and Temper tracked distortion
Check and Windows preview / check (anvil) (push) Successful in 2m8s
Check and Windows preview / check (crucible) (push) Successful in 1m32s
Check and Windows preview / check (lathe) (push) Successful in 2m13s
Check and Windows preview / check (patina) (push) Successful in 2m5s
Check and Windows preview / check (rivet) (push) Successful in 1m34s
Check and Windows preview / check (temper) (push) Successful in 2m12s
Check and Windows preview / previews (push) Successful in 1m19s
Check and Windows preview / windows (push) Successful in 2m13s
Independent plugin release / publish (push) Successful in 8s
Independent plugin release / plan (push) Successful in 6s
Independent plugin release / build (push) Successful in 2m57s
Check and Windows preview / check (anvil) (push) Successful in 2m8s
Check and Windows preview / check (crucible) (push) Successful in 1m32s
Check and Windows preview / check (lathe) (push) Successful in 2m13s
Check and Windows preview / check (patina) (push) Successful in 2m5s
Check and Windows preview / check (rivet) (push) Successful in 1m34s
Check and Windows preview / check (temper) (push) Successful in 2m12s
Check and Windows preview / previews (push) Successful in 1m19s
Check and Windows preview / windows (push) Successful in 2m13s
Independent plugin release / publish (push) Successful in 8s
Independent plugin release / plan (push) Successful in 6s
Independent plugin release / build (push) Successful in 2m57s
Lathe places EQ bands on harmonics 1-32 of the played note, so a cut on harmonic 3 stays on harmonic 3 on every note. Temper normalises each note's level before an oversampled shaper and tunes its floor, push and bright filters to the note, so every note distorts the same. The note tracker moves from Anvil into common-dsp, together with a state-variable filter, 4x oversampler and harmonic meter. Anvil's behaviour and editor render are unchanged. docs/ideas.md collects all plugin ideas and their status.
This commit is contained in:
1 parent
f36ff0780c
commit
b3ebe4d952
48 files changed
+9862
-339
No files matched your search
@@ -27,6 +27,8 @@ python scripts/check-plugin.py --plugin rivet
|
||||
python scripts/check-plugin.py --plugin patina
|
||||
python scripts/check-plugin.py --plugin anvil
|
||||
python scripts/check-plugin.py --plugin crucible
|
||||
python scripts/check-plugin.py --plugin lathe
|
||||
python scripts/check-plugin.py --plugin temper
|
||||
python -m unittest discover -s scripts/tests -v
|
||||
```
|
||||
|
||||
@@ -49,6 +51,8 @@ python scripts/build-plugin.py --plugin rivet --target x86_64-pc-windows-gnu
|
||||
python scripts/build-plugin.py --plugin patina --target x86_64-pc-windows-gnu
|
||||
python scripts/build-plugin.py --plugin anvil --target x86_64-pc-windows-gnu
|
||||
python scripts/build-plugin.py --plugin crucible --target x86_64-pc-windows-gnu
|
||||
python scripts/build-plugin.py --plugin lathe --target x86_64-pc-windows-gnu
|
||||
python scripts/build-plugin.py --plugin temper --target x86_64-pc-windows-gnu
|
||||
python scripts/package-windows.py
|
||||
python scripts/package-windows.py --plugin rivet
|
||||
python scripts/package-windows.py --plugin patina
|
||||
@@ -77,6 +81,8 @@ cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/patina.png --plu
|
||||
cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/patina-compact.png --plugin patina --compact
|
||||
cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/anvil.png --plugin anvil
|
||||
cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/crucible.png --plugin crucible
|
||||
cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/lathe.png --plugin lathe
|
||||
cargo run --manifest-path tools/editor-check/Cargo.toml -- /tmp/temper.png --plugin temper
|
||||
```
|
||||
|
||||
Patina also accepts `--silent`, `--delta`, and `--bypass` as render fixtures.
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
# Plugin ideas
|
||||
|
||||
A running list of plugin ideas for riddim, dubstep and bass-music sound design.
|
||||
Each entry names the problem first. Entries are grouped as released or idea. Names follow the metalwork theme of Rivet, Patina, Anvil and Crucible.
|
||||
|
||||
## Problems seen in bass-music production
|
||||
|
||||
1. Every bass patch brings its own sub level and phase, so the weight of a drop
|
||||
jumps between switch-ups, and layered patches cancel in the sub.
|
||||
2. Patches at the same peak level still differ in perceived loudness and
|
||||
brightness. The usual fix is hand-set gain or clipping per patch.
|
||||
3. Resampling is repetitive: bounce, chop, trim, declick, normalise, find the
|
||||
root key, name, save, load into a sampler.
|
||||
4. Writing wobbles: LFO shapes are drawn, synced, copied and edited for every
|
||||
variation. Triplet and dotted patterns plus per-note changes take long.
|
||||
5. Unison, OTT and stereo distortion widen the mids. Parts disappear in mono or
|
||||
on club systems.
|
||||
6. Kick and bass clash. Sidechain helps, but the sub phase at each note start
|
||||
changes how the kick hits.
|
||||
7. Distortion chains build up harsh resonances. (Patina covers this.)
|
||||
8. Comparing a drop with a reference: the difference is usually sub/mid balance
|
||||
over time, which generic meters do not show clearly.
|
||||
9. Fixed-frequency tools act differently on every note. An EQ boost at 300 Hz
|
||||
lifts the 4th harmonic of one note and the 7th of another; a distortion with
|
||||
a fixed tone filter sounds brighter on low notes than on high notes.
|
||||
10. Layered bass patches partly cancel in the mids, not only in the sub.
|
||||
|
||||
## Released
|
||||
|
||||
### Anvil — sub anchor (problems 1, 6)
|
||||
|
||||
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).
|
||||
|
||||
### Crucible — resampler (problem 3)
|
||||
|
||||
Records the input continuously. One click captures the last bars on the host
|
||||
bar grid, slices on a grid or on hits, trims, declicks, normalises, detects the
|
||||
root key and exports labelled WAVs, a full loop and an optional Serum/Vital
|
||||
wavetable. See [Crucible](crucible/README.md).
|
||||
|
||||
### Lathe — harmonic EQ (problem 9)
|
||||
|
||||
EQ bands placed on harmonics 1–32 of the detected note instead of fixed
|
||||
frequencies. "+4 dB on harmonic 3, −6 dB on harmonic 7" sounds the same on F1
|
||||
and on C2. Odd/even balance, tilt over harmonic number, and a Focus control
|
||||
that lifts or cuts everything between the harmonics. Uses Anvil's pitch
|
||||
tracker, or MIDI. See [Lathe](lathe/README.md).
|
||||
|
||||
### Temper — note-tracked distortion (problem 9)
|
||||
|
||||
A waveshaper whose tone filters before and after the shaper follow the note, so
|
||||
every note distorts with the same character and the same harmonic content.
|
||||
Input level is normalised before the shaper, so drive does not depend on how
|
||||
loud the patch is, and the output is gain-matched. Oversampled to keep aliasing
|
||||
(which is never harmonic) out. See [Temper](temper/README.md).
|
||||
|
||||
## Ideas
|
||||
|
||||
### Weld — layer phase alignment (problem 10)
|
||||
|
||||
Takes a second bass layer through the sidechain. Per band, it rotates phase
|
||||
with allpass filters (no added delay) and flips polarity so the layers sum
|
||||
instead of cancel. A display shows how much level the cancellation cost. Anvil
|
||||
solves the sub band; Weld solves the mids. Hardest of the list: phase matching
|
||||
against a moving sidechain.
|
||||
|
||||
### Ballast — switch-up loudness leveller (problem 2)
|
||||
|
||||
Measures short-term perceived loudness per note or per switch-up against a
|
||||
target or a reference patch and adjusts gain only, so each switch-up lands at
|
||||
the same loudness without compression changing its character. Earlier working
|
||||
name: Hit Leveler. Pairs with Anvil: Anvil levels the sub, Ballast the whole
|
||||
patch.
|
||||
|
||||
### Bellows — pitch-tracked resonator
|
||||
|
||||
A comb or Karplus-style resonator tuned to the detected note. It turns noise,
|
||||
distortion or drums into pitched metallic tone that is in key on every note.
|
||||
Damping, harmonic spread, single or multiple combs.
|
||||
|
||||
### Gauge — low-end mono check (problem 5)
|
||||
|
||||
Shows phase correlation and mono-sum loss per band and per note in the bass
|
||||
range, and marks the notes where widening breaks the mono sum. Optional fixes:
|
||||
mono below a chosen frequency and phase rotation on the mids. Display-first, so
|
||||
it is a small build. Earlier working name: Bass Mono Check.
|
||||
|
||||
### Wobble sequencer (problem 4)
|
||||
|
||||
Step patterns for volume, filter, formant and pitch with triplet and dotted
|
||||
grids built in. Each MIDI note selects a different pattern, so a switch-up is a
|
||||
different note in the piano roll. ShaperBox overlaps, but it has no note-keyed
|
||||
patterns. No name yet.
|
||||
|
||||
### Drop compare (problem 8)
|
||||
|
||||
Loudness-matched A/B of a drop against a reference, with sub, low-mid, mid and
|
||||
high energy over time: for example "your sub is 3 dB under the reference in
|
||||
bars 2–4". No name yet.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Lathe changelog
|
||||
|
||||
## 0.1.0
|
||||
|
||||
- Introduce Lathe, a harmonic EQ for bass sound design.
|
||||
- Bands sit on harmonics 1–32 of the played note instead of fixed frequencies,
|
||||
so a cut on harmonic 3 stays on harmonic 3 on every note.
|
||||
- Draw a gain per harmonic; Tilt, Odd/Even and Between shape the whole series.
|
||||
- Detect pitch and note starts from the audio with 67 ms lookahead, or follow
|
||||
MIDI notes sent to the effect. Filters retune at each note's attack.
|
||||
- Controls: Tilt, Odd/Even, Between, Width, Harmonics, Smooth, Gate, Mix,
|
||||
Output, Snap to semitone, Bypass. Shapes: Flat, Odd only, Even only, Hollow.
|
||||
- Harmonic editor shows the measured level of each harmonic before and after.
|
||||
@@ -0,0 +1,66 @@
|
||||
# Lathe
|
||||
|
||||
Lathe is an EQ whose bands sit on the harmonics of the note being played.
|
||||
Current version **0.1.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
|
||||
same bass sounds different on every note of a riddim line. Lathe follows the
|
||||
pitch and places one band on each harmonic: "−12 dB on harmonic 3" stays on
|
||||
harmonic 3 whatever note plays.
|
||||
|
||||

|
||||
|
||||
## Install on Windows
|
||||
|
||||
Copy `Lathe.clap` into `C:\Program Files\Common Files\CLAP\`. In FL Studio 2024.1
|
||||
or newer, open Options → Manage plugins, enable Verify plugins, and Find installed
|
||||
plugins. Load Lathe in a mixer slot of the bass, after the synth and before bus
|
||||
processing. Keep the font license with redistributed packages.
|
||||
|
||||
## Work with it
|
||||
|
||||
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).
|
||||
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:
|
||||
- **Tilt** brightens or darkens in dB per octave of harmonic number. The
|
||||
fundamental is the pivot.
|
||||
- **Odd/Even** lifts odd harmonics and lowers even ones (positive, more
|
||||
square-like) or the reverse (negative, more octave-like).
|
||||
- **Between** sets the gain halfway between harmonics. Cut it to clean up noise,
|
||||
beating and inharmonic grit; lift it for dirt.
|
||||
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:
|
||||
|
||||
- **Harmonics** is how many harmonics are shaped (8–32). Higher harmonics pass
|
||||
unchanged.
|
||||
- **Smooth** is the retune time for slides and pitch bends. A new note always
|
||||
retunes at once, on its attack.
|
||||
- **Gate** is the input level that counts as a note. Raise it if tails or reverb
|
||||
start new notes.
|
||||
- **Mix** blends with the delayed dry signal; **Output** trims the level.
|
||||
- **Snap to semitone** rounds the detected pitch. Turn it off for slides.
|
||||
- **Shapes** set the drawn gains: Flat, Odd only, Even only, or Hollow (harmonics
|
||||
2–4 cut).
|
||||
|
||||
The drawn gains are saved with the project but are not automation parameters;
|
||||
the macros are.
|
||||
|
||||
### Pitch from MIDI
|
||||
|
||||
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.
|
||||
|
||||
## Timing and limits
|
||||
|
||||
Detection uses about 67 ms of lookahead, reported to the host for delay
|
||||
compensation, so the bands are tuned before each note's attack leaves the
|
||||
plugin. Pitch range is 30–500 Hz, one note at a time; chords are not separated.
|
||||
Before the first note Lathe passes audio unchanged; between notes it holds the
|
||||
last tuning so tails keep their shape. Bands above 0.45 × the sample rate are
|
||||
skipped.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 301 KiB |
@@ -0,0 +1,14 @@
|
||||
# Temper changelog
|
||||
|
||||
## 0.1.0
|
||||
|
||||
- Introduce Temper, a note-tracked distortion for bass sound design.
|
||||
- Normalises each note's level before the shaper, so quiet and loud patches are
|
||||
driven the same.
|
||||
- Floor (highpass), Push (one harmonic boosted or cut) and Bright (lowpass) sit
|
||||
at multiples of the played note, so every note keeps the same character.
|
||||
- Curves: Soft, Hard, Fold and Tube, with Bias for even harmonics. The shaper runs
|
||||
at 4× oversampling.
|
||||
- Auto gain keeps the output at the input loudness while Drive changes.
|
||||
- Detect pitch and note starts from the audio with 67 ms lookahead, or follow
|
||||
MIDI notes sent to the effect.
|
||||
@@ -0,0 +1,66 @@
|
||||
# Temper
|
||||
|
||||
Temper is a distortion that drives every note the same. Current version **0.1.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
|
||||
a patch that is 6 dB quieter is driven 6 dB less. Across a riddim line that makes
|
||||
some notes fizzy and others dull. Temper evens out each note's level before the
|
||||
shaper and moves its tone filters with the pitch, so the character stays the same
|
||||
on every note.
|
||||
|
||||

|
||||
|
||||
## Install on Windows
|
||||
|
||||
Copy `Temper.clap` into `C:\Program Files\Common Files\CLAP\`. In FL Studio
|
||||
2024.1 or newer, open Options → Manage plugins, enable Verify plugins, and Find
|
||||
installed plugins. Load Temper in a mixer slot of the bass. Keep the font license
|
||||
with redistributed packages.
|
||||
|
||||
## Work with it
|
||||
|
||||
1. Choose a **Curve**:
|
||||
- **Soft**: tanh, smooth and rounded.
|
||||
- **Hard**: clipping with a narrow knee, dense and square-like.
|
||||
- **Fold**: the wave folds back on itself; Drive moves the upper harmonics.
|
||||
- **Tube**: the negative half clips earlier, adding even harmonics.
|
||||
2. Set **Drive**. The transfer plot shows the curve over the range a normalised
|
||||
note covers; the **Into shaper** meter shows how far past the knee it goes.
|
||||
3. Add **Bias** for asymmetry and even harmonics.
|
||||
4. Shape the tone around the shaper, all in multiples of the note:
|
||||
- **Floor** is a highpass before the shaper (0.25–2 × the fundamental; 0 is
|
||||
off). It keeps sub mud out of the distortion. Put Anvil after Temper to add a
|
||||
clean sub back.
|
||||
- **Push** boosts or cuts one harmonic (**Push at**, 1–16) before the shaper,
|
||||
so the distortion bites in the same place on every note.
|
||||
- **Bright** is a lowpass after the shaper at a harmonic number (4–64; 0 is
|
||||
off), so the top end stops at the same harmonic on every note.
|
||||
|
||||
Other controls:
|
||||
|
||||
- **Normalize** is how far each note's level is evened out before Drive. At 100 %
|
||||
a quiet and a loud patch distort the same; at 0 % Temper acts like a normal
|
||||
distortion.
|
||||
- **Auto gain** keeps the output at the input's loudness, so turning up Drive
|
||||
changes the character, not the level.
|
||||
- **Gate** is the input level that counts as a note.
|
||||
- **Mix** blends with the delayed dry signal; **Output** trims the level.
|
||||
|
||||
### Pitch from MIDI
|
||||
|
||||
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.
|
||||
|
||||
## Timing and limits
|
||||
|
||||
Detection uses about 67 ms of lookahead; the 4× oversampling filters add under
|
||||
1 ms. Both are reported to the host for delay compensation. Pitch range is
|
||||
30–500 Hz, one note at a time. Before the first note the tracked filters are off;
|
||||
between notes they hold the last tuning.
|
||||
|
||||
Aliasing stays below −60 dB for bass material (tested with a 2 kHz tone at 24 dB
|
||||
drive and a 440 Hz tone at full drive, on every curve). High-pitched content at
|
||||
full drive aliases more: a 5 kHz tone at 36 dB on the Hard curve reaches about
|
||||
−31 dB.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 280 KiB |
Reference in new issue
Block a user