Harmonic Comb — User Guide
Recursive inharmonic comb morph with a sample-by-sample beta trajectory, weighted resonant teeth, random phase modulation, and true dry/effect mixing.
What this does
Harmonic Comb is a time-varying stack of recursive comb resonators. A randomly chosen fundamental delay anchors a set of teeth whose delays follow fundamental / h^β. The exponent β moves linearly from Beta_start to Beta_end over the sound, so the resonant spacing can move from harmonic to compressed or stretched/inharmonic structures.
The harmonic index h = 1 is fixed at the fundamental delay because 1^β = 1. Higher teeth are weighted by 1/h² and receive independent random phases in the cosine modulation.
Quick start
- Select exactly one Sound.
- Run
Harmonic_Comb.praat. - Choose a preset, or Custom.
- Use Beta_start and Beta_end to define the spectral-spacing trajectory.
- Set Wet_dry_percent; 0 = dry, 100 = comb-resonance contribution only.
- Run the script. The result is named
original_comb_Preset.
Presets
| Preset | Harmonics | Fundamental delay range | β start → end | Modulation period |
|---|---|---|---|---|
| Subtle Comb | 4 | 30–80 samples | 1.00 → 1.05 | 1200 samples |
| Medium Comb | 7 | 20–100 samples | 1.00 → 1.30 | 1000 samples |
| Heavy Comb | 11 | 15–120 samples | 0.85 → 1.50 | 850 samples |
| Extreme Comb | 16 | 10–150 samples | 0.70 → 2.00 | 700 samples |
Parameters
| Parameter | Default | Behavior |
|---|---|---|
| Number_of_harmonics | 7 | Number of recursive comb teeth. |
| Fundamental_delay_min_samp | 20 | Lower bound for the randomly selected fundamental delay. |
| Fundamental_delay_max_samp | 100 | Upper bound. The two bounds are rounded, clamped to at least 2 samples, and reordered if necessary. |
| Beta_start | 1.0 | Initial spacing exponent. β=1 is harmonic; β<1 compresses; β>1 stretches. |
| Beta_end | 1.3 | Final exponent; β is linearly interpolated sample-by-sample. |
| Modulation_period | 1000 samples | Period parameter in the cosine term. Harmonic h uses h/period cycles per sample plus a random phase. |
| Wet_dry_percent | 50 | Clamped to 0–100. |
| Scale_peak | 0.95 | Final attenuate-only peak ceiling; quiet signals are not boosted. |
Comb engine
The delayed read is from self, so each tooth is a feedback/recursive comb, not a feed-forward tap. Teeth whose current delay falls below 2 samples are treated as inactive to avoid zero/one-sample self-gain behavior.
The chosen fundamental delay is random on every run unless the minimum and maximum bounds are equal. Every tooth also receives a random phase. There is no exposed random seed, so repeated runs with identical form values need not be identical.
Wet/Dry semantics
The internal processed buffer contains the dry signal plus comb resonance. The final mixer explicitly subtracts the embedded dry component, so the public control behaves as advertised:
Output and visualization
- Name:
original_comb_Preset. - Duration, sample rate, channel count and time domain: inherited from the selected Sound; the script processes the Sound directly without adding a tail.
- Peak handling: only attenuates when the result exceeds
Scale_peak.
The visualization contains the original waveform, result waveform, a 1/h² weight chart, and paired start/end delay bars for each comb tooth. Those delay bars show the endpoints of the β morph; the actual delay changes continuously across the sound.