MidHump¶
A mid-hump overdrive. Mids are driven into soft diode clipping while bass passes at unity gain, which keeps the low end tight. An optional clean Blend, which the original circuit does not have, brings back the full range, and Bloom adds a bias shift that makes the distortion change over the life of each note.
Download¶
Download MidHump 0.1.0 Try it in your browser
Linux x86_64. CLAP, VST3 and LV2 with an installer. SHA256SUMS · Release notes · How to install
Details¶
| Property | Value |
|---|---|
| Source | src/midhump.dsp |
| Plugin URI | urn:pedalkit/midhump |
| LV2 class | Distortion |
| Channels | Mono in, mono out |
| Latency | 32 samples (0.67 ms at 48 kHz), reported to the host |
| Research | Circuit notes, design notes |
Controls¶
| Control | Range | Default | What it does |
|---|---|---|---|
| Drive | 0 to 100 % | 50 % | Clipping-stage gain, from about 21 dB to about 41 dB, with an audio (log) taper |
| Tone | 0 to 100 % | 50 % | Treble shelf after the 723 Hz low-pass, about 13 dB of range (a stand-in for the pedal's tone network; see limitations) |
| Level | −40 to +12 dB | 0 dB | Output level |
| Blend | 0 to 100 % | 0 % | Adds a full-range clean signal. 0 is the circuit as published. |
| Bloom | 0 to 100 % | 0 % | Bias shift: hard playing pushes the diodes off centre, adding second harmonic that builds up over tens of milliseconds and fades after the note. 0 is the circuit as published. |
Every control is smoothed. The plugin also has a read-only Latency output for the host.
Presets¶
The LV2, VST3 and CLAP plugins all ship with the same factory presets. They are starting points chosen by measurement, not by ear. Each one sets every control, and Level is set so that a −12 dBFS plucked guitar line comes out within 0.05 dB of "Edge of Breakup" (K-weighted), so switching presets doesn't jump in loudness.
| Preset | Drive | Tone | Level | Blend | Bloom | Idea |
|---|---|---|---|---|---|---|
| Edge of Breakup | 10 | 40 | 0 | 0 | 0 | Light odd-harmonic grit for pushing an amplifier |
| Mid Hump | 50 | 50 | −2 | 0 | 0 | The defaults: the reference circuit at mid Drive and Tone |
| Lead | 100 | 65 | −6.4 | 0 | 0 | Full Drive with a brighter Tone, for sustained single notes |
| Bass Grind | 60 | 40 | −3.6 | 100 | 0 | Mid-hump drive on bass, with the full clean Blend to keep the lowest octave |
Levels are in dB, the rest in %. The presets live in src/midhump.presets.toml.
Data: presets_spectrum.csv (preset, band_hz, level_db) and presets_levels.csv (preset, loudness_rel_db, peak_dbfs, square_peak_dbfs).
Signal path¶
in → input high-pass (15.6 Hz)
├─ clean: delay 32 samples → × Blend × 0.5 ──────────────────────────┐
└─ clipping stage: input + 4x oversampled diode clip of │
(720 Hz high-pass → feedback low-pass → gain 11.9 to 118), │
biased by an envelope of the same branch × Bloom │
→ 723 Hz low-pass → Tone shelf → DC blocker (5 Hz) ────────────────┤
→ sum → Level → safety limiter (≤ −0.1 dBFS) → out
The schematic redraws this as analogue stages, one sheet per section of the circuit notes. It draws the model, including Blend and the modelled tone shelf, rather than the pedal exactly. Bloom is not drawn: it has no counterpart in the circuit, and at 0 the model is unchanged.
Measured behaviour¶
These figures come from make test at 48 kHz. The plots below are regenerated each time the site is published. Click a plot to open it full size; the CSV data behind each one is linked underneath.
Summary¶
- Silence in gives silence out. The output stays below −120 dBFS at 32 combinations of extreme settings.
- Peak level. With 0 dBFS square waves, noise, sweeps or impulses in, at every Blend setting and at Bloom 0 and 100, the worst sample is −0.10 dBFS. The plugin is finite and bounded at every sample rate from 8 kHz to 192 kHz.
- The model matches its equations. The small-signal response is within 0.16 dB of the analytic circuit model from 50 Hz to 4 kHz at Drive 0, 50 and 100.
- Mid hump. At Drive 100 the response peaks at 826 Hz, with 100 Hz 12.1 dB below the peak. Gain at 2 kHz runs from 20.9 dB at Drive 0 to 40.4 dB at Drive 100.
- Odd-order distortion at Bloom 0. The clipper is symmetric, and even harmonics stay at the float noise floor.
- Bloom. On a loud 220 Hz tone, Bloom 100 raises H2 from the noise floor to −19.9 dBc at Drive 50 (−31.2 dBc at Drive 100). It builds up over 22 ms to 34 ms, lasts past the loud passage (−41 dBc 100 ms later at Drive 50) and has died away 1.2 s after it. A −40 dBFS tone is bit-identical at Bloom 0 and 100.
- Aliasing. Against a 1x build at Drive 100, 4x oversampling lowers the worst alias by 24.5 dB for a 3.7 kHz tone and by 46.0 dB for a 1.1 kHz tone. The worst alias at 1.1 kHz is −83.3 dBc.
Frequency response¶
Data: freqresp.csv (columns panel, input_dbfs, drive, tone, blend, freq_hz, gain_db).
- Drive (top left, −70 dBFS noise). A broad hump centred near 830 Hz, from about +16 dB at Drive 0 to +36 dB at Drive 100. Below it the response falls at about 6 dB/octave towards unity, and above it the 723 Hz low-pass takes over. At Drive 100 the C4 feedback low-pass (5.7 kHz) also pulls the top end down.
- Louder input (top right, −20 dBFS). The diodes compress the hump to about +10 to +15 dB, and the Drive curves bunch together.
- Tone (bottom left). Tone only changes the response above about 500 Hz, from a peak of 35 dB at 0 % to 39 dB at 100 %, with the peak moving up to about 1.4 kHz.
- Blend (bottom right). At small signals the clean path adds 0.5 times the input, time-aligned. The lift below 100 Hz is small here because the unclipped branch is already large there. At −20 dBFS, where the branch clips, Blend 100 % lifts 30 Hz to 60 Hz by 2.6 dB to 3.1 dB across the Drive range.
Harmonics and aliasing¶
Data: harmonics.csv (f0_hz, drive, harmonic, level_dbc) and aliasing.csv (build, f0_hz, worst_alias_dbc).
Single sines at −12 dBFS, Tone 50 %:
| Drive | 110 Hz THD | 220 Hz THD | H3 at 110 Hz |
|---|---|---|---|
| 0 % | 2.5 % | 7.0 % | −32 dBc |
| 50 % | 8.0 % | 15.0 % | −22 dBc |
| 100 % | 30.5 % | 26.8 % | −12 dBc |
Only odd harmonics appear. 220 Hz distorts more than 110 Hz at low Drive, because more of it gets through the 720 Hz high-pass into the clipper.
Dynamics (Bloom)¶
Data: dynamics.csv (test, drive, bloom, series, x, value_db, where x is time in seconds, input level in dBFS or frequency in hertz, depending on test).
- Left. A 220 Hz tone at −12 dBFS for 0.6 s between quieter passages. At Bloom 0 the second harmonic stays at the analysis floor. At Bloom 50 and 100 it settles at −26 dBc and −20 dBc, and after the loud section it falls away over about a second rather than at once. The spikes at the two steps come from analysis windows that straddle them, not from the effect.
- Middle. The cleanup curve. H3 is the same at both settings. H2 appears only once the branch passes the diode knee (about −18 dBFS in at Drive 50), peaks around −12 dBFS and falls again as harder clipping squares off both halves.
- Right. A plucked 110 Hz note (a decaying sine). At Bloom 100, H2 rises to −37 dBc about 50 ms into the note and decays with it.
- Aliasing. At Drive 100 and Bloom 100 the worst alias for a 1.1 kHz tone is −84.5 dBc with 4x oversampling, against −38.5 dBc at 1x.
tests/out/midhump/pluck-bloom0.wav and pluck-bloom100.wav are a harmonic-rich pluck through Drive 50 at each setting, for listening.
Sweeps and targets¶
Data: sweep_level.csv (drive, freq_hz, level_db).
Data: targets.csv (panel, setting, x, value) and samplerates.csv (setting, sample_rate_hz, finite, peak_dbfs, rms_dbfs).
The middle panel shows why the pedal never goes fully square: once the diodes conduct (about −40 dBFS in at Drive 100), the 1 kHz fundamental keeps rising with input, because the unclipped input is always part of the output.
What to tune by ear¶
These values are chosen or inferred, and nothing has been listened to. The constants are in src/midhump.dsp.
Vd(0.6 V): the diode knee level. Lower gives more compression and earlier clipping.- The Drive law (
Rd): where in the travel the gain rises. cleanTrim(0.5): the size of the Blend path.fcZeroandfcShelf: the Tone shelf, which is a stand-in for the real tone network.- The input level convention: 0 dBFS is treated as 1 V at the input.
- Bloom's time constants,
bloomAtt(15 ms) andbloomRel(150 ms): how long the attack stays clean and how long the asymmetry hangs on after a loud passage. bloomMax(half ofVd): how far off centre the diodes go at Bloom 100, and so how strong the second harmonic is. Also listen for whether the slow recovery reads as a swell or as a gated, sputtering decay at high Drive.
Known limitations¶
- Not a circuit simulation. The diodes are a static soft clipper, and the feedback low-pass sits before them instead of acting on the clipped signal.
- Tone is behavioural, and does not match the published description. The shelf moves a zero from 3.29 kHz down to 723 Hz. The analysis it is meant to follow describes a cut at 3.2 kHz at one end of the pot and a boost there at the other. See section 7 of the circuit notes.
- Input and output buffers and the op-amp's own limits are not modelled.
- Mono only.
MidHump is an independent design built from public information. It is not affiliated with, or endorsed by, any pedal manufacturer.