Check and Windows preview / check (anvil) (push) Successful in 2m37s
Check and Windows preview / check (ballast) (push) Successful in 1m49s
Check and Windows preview / check (braze) (push) Successful in 1m48s
Check and Windows preview / check (crucible) (push) Successful in 2m8s
Check and Windows preview / check (forge) (push) Successful in 2m9s
Check and Windows preview / check (knurl) (push) Successful in 1m53s
Check and Windows preview / check (lathe) (push) Successful in 1m58s
Check and Windows preview / check (patina) (push) Successful in 3m34s
Check and Windows preview / check (planish) (push) Successful in 1m59s
Check and Windows preview / check (quench) (push) Successful in 1m51s
Check and Windows preview / check (rivet) (push) Successful in 1m50s
Check and Windows preview / check (temper) (push) Successful in 1m58s
Check and Windows preview / check (weld) (push) Successful in 3m16s
Check and Windows preview / previews (push) Successful in 2m17s
Check and Windows preview / windows (push) Successful in 3m14s
Independent plugin release / publish (push) Successful in 10s
Independent plugin release / plan (push) Successful in 8s
Independent plugin release / build (push) Successful in 3m50s
The producer-feedback round: stable note tracking, the NOTE pitch source with Key lock and Follow bends, unsure-means-neutral fallbacks, Anvil's Enhance mode, MAIN and ADVANCED pages, Ballast on Grid by default, and Crucible's sure-note slice names with a song key. Adds docs/pitch.md for the shared pitch source, updates every changed plugin's README and changelog, the release table, the editor previews, the website bullets, and the status in docs/ideas.md.
99 lines
5.1 KiB
Markdown
99 lines
5.1 KiB
Markdown
# Knurl
|
||
|
||
Knurl gives every cycle of the note its own level, timing and grit. Current
|
||
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
|
||
that texture comes from long chains of distortion, comb filters, formants and
|
||
resampling, and it changes from note to note. Knurl works on single cycles of the
|
||
wave instead. It follows the played note and treats each cycle on its own, and
|
||
every amount is counted in cycles, not in Hz or tempo. So the texture has the
|
||
same grain on F1 and on C2.
|
||
|
||

|
||
|
||
## Install on Windows
|
||
|
||
Copy `Knurl.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 Knurl in a mixer slot of the bass. Keep the font license with
|
||
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:
|
||
- **Double** (0, −9 dB): every second cycle quieter. This makes a sub-octave
|
||
growl, exactly in tune, about 8 dB under the fundamental.
|
||
- **Triple** (0, −12, −12 dB): a growl an octave and a fifth down.
|
||
- **Fry** (0, −14, −5, −14 dB, the default): an uneven vocal-fry rattle.
|
||
- **Gallop** and **Stutter**: rhythmic patterns over six and eight cycles.
|
||
- **Off**: every cycle at full level.
|
||
3. Draw your own pattern on the bars: drag a bar to set the level of that cycle,
|
||
double-click to reset it. **Steps** sets the length (1–16 cycles).
|
||
4. Add surface:
|
||
- **Level** gives every cycle a random level (standard deviation in dB).
|
||
- **Time** moves every cycle a little in time (percent of a period): rattle
|
||
and scrape.
|
||
- **Grit** adds a short noise burst inside every cycle. **Tone** sets its
|
||
lowest frequency in harmonics of the note, **Position** where in the cycle
|
||
it sits, and **Length** how long it is. The squares under the pattern bars
|
||
switch the burst per step.
|
||
5. **Edge** sets how soft each step change is. Low values are sharper and
|
||
buzzier; high values smoother.
|
||
|
||
**Random**: **Same every note** (default) restarts every random sequence at each
|
||
note, so identical notes sound identical, which keeps a riddim line tight.
|
||
**Free** lets the sequences run on, so every note differs.
|
||
|
||
**Mix** blends with the delayed dry signal; **Output** trims the level.
|
||
|
||
### Pitch source
|
||
|
||
**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
|
||
|
||
Knurl delays the audio by about 71 ms: 67 ms of pitch-detection lookahead plus
|
||
4 ms of room for the timing jitter. The delay is reported to the host for delay
|
||
compensation, so the cycle clock knows every note before its attack leaves the
|
||
plugin. The cycle clock restarts at every note start, so the pattern always
|
||
begins with step 1 on the attack. Pitch range is 30–500 Hz, one note at a time.
|
||
Between notes the effects fade out over 20 ms, so tails stay clean.
|
||
|
||
Knurl works per cycle of the tracked pitch; it does not look for cycle borders in
|
||
the waveform. With a stable pitch that is the same thing. With heavy pitch
|
||
modulation inside a note the pattern follows the tracked pitch, which can lag a
|
||
fast bend. Both channels get the same treatment, so the effect is mono-safe.
|
||
|
||
Knurl's patterns put a real sub-octave into the signal. A pitch detector after
|
||
Knurl (Anvil, Lathe or Temper in Audio mode) then reads notes from C2 upwards
|
||
an octave too low. Put Knurl after the other tracked plugins, or use MIDI as
|
||
their source. See [Signal chain](../chain.md).
|
||
|
||
## How it works
|
||
|
||
A note tracker (shared with Anvil, Lathe and Temper) detects pitch and note
|
||
starts ahead of the delayed audio. A cycle clock starts at 0 on every note and
|
||
advances by f0 / sample rate. Each cycle gets its step gain and its random level
|
||
and time offset from a hash of the cycle number, so the result is deterministic.
|
||
Step changes are raised-cosine crossfades over the last **Edge** of a cycle;
|
||
level jitter crossfades over half a cycle and time jitter over the whole cycle,
|
||
read from the delay line with cubic interpolation. The grit is white noise
|
||
through a state-variable highpass at **Tone** × f0, shaped by a sin² window and
|
||
scaled to the input level. There is no nonlinearity, so no oversampling is
|
||
needed.
|