Check and Windows preview / check (anvil) (push) Successful in 2m22s
Check and Windows preview / check (crucible) (push) Successful in 1m55s
Check and Windows preview / check (knurl) (push) Successful in 1m42s
Check and Windows preview / check (lathe) (push) Successful in 1m41s
Check and Windows preview / check (patina) (push) Successful in 2m43s
Check and Windows preview / check (planish) (push) Successful in 2m20s
Check and Windows preview / check (rivet) (push) Successful in 1m42s
Check and Windows preview / check (temper) (push) Successful in 1m39s
Check and Windows preview / check (weld) (push) Successful in 2m40s
Check and Windows preview / previews (push) Successful in 1m37s
Check and Windows preview / windows (push) Successful in 2m34s
Independent plugin release / publish (push) Successful in 9s
Independent plugin release / plan (push) Successful in 7s
Independent plugin release / build (push) Successful in 3m8s
- Crucible 0.3.0: Keep takes. - Patina 0.4.0: Tone guard and the Bass line preset. - Planish 0.1.0 is already at its first version. - Update the current version in every plugin guide; several still named an older release.
92 lines
4.7 KiB
Markdown
92 lines
4.7 KiB
Markdown
# Knurl
|
||
|
||
Knurl gives every cycle of the note its own level, timing and grit. Current
|
||
version **0.2.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
|
||
|
||
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 from MIDI
|
||
|
||
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).
|
||
|
||
## 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.
|