Stereo Fibonacci Convolution — User Guide
Builds left/right impulse patterns from Fibonacci sequences, adds random timing jitter, and uses the resulting IR for stereo or multichannel convolution.
What this does
Stereo Fibonacci Convolution generates two related impulse responses. The left and right sides start from different Fibonacci seeds, use different scale divisors, and receive independent Gaussian timing jitter. The two patterns are combined into a stereo IR and convolved with the selected Sound.
What is convolution?
Convolution applies an impulse response to a source. Each IR tap produces a delayed copy of the source, so a Fibonacci-spaced IR turns the source into a family of repetitions whose timing follows the Fibonacci-derived pattern. Here the IR is synthesized separately for the two stereo sides.
Fibonacci timing
For each side, the sequence begins with two user-defined seeds and continues by addition:
F[n+2] = F[n+1] + F[n]nominalTap[n] = (F[n] / scale_divisor) × IR_durationrealizedTap[n] = nominalTap[n] + randomGauss(0, jitter_s)A tap is added only when its realized time lies strictly inside the IR. Consequently Number_of_impulses is a maximum number of attempts, not a guarantee that all requested taps will survive. Custom input is capped internally at 256 impulses.
Presets
| Preset | IR | N | Left seeds / scale / jitter | Right seeds / scale / jitter |
|---|---|---|---|---|
| Subtle Fibonacci | 1.2 s | 8 | 1,1 / 120 / 5 ms | 1,2 / 140 / 8 ms |
| Medium Fibonacci | 1.5 s | 12 | 1,1 / 100 / 10 ms | 2,3 / 120 / 20 ms |
| Heavy Fibonacci | 2.0 s | 16 | 1,2 / 85 / 18 ms | 3,5 / 100 / 35 ms |
| Extreme Fibonacci | 3.0 s | 20 | 2,3 / 70 / 30 ms | 5,8 / 85 / 50 ms |
| Custom | Uses the form values. | |||
Pulse_width, and Pulse_period. They do not override Pulse_amplitude, wet/dry, or output switches.Parameters
| Parameter | Meaning in this implementation |
|---|---|
| IR_duration_s | Impulse-response domain. Internally kept at least four samples long. |
| Number_of_impulses | Maximum sequence terms attempted per side; Custom is capped at 256. |
| Left/Right_fib_start_1, _2 | Initial values of each Fibonacci recurrence. |
| Left/Right_scale_divisor | Converts Fibonacci numbers to nominal positions within the IR. |
| Left/Right_jitter_s | Gaussian timing standard deviation added independently to each attempted tap. |
| Pulse_amplitude | Legacy name. Passed to Praat PointProcess: To Sound (pulse train) as its adaptation factor; it is not a direct final IR amplitude control. Each non-silent L/R IR is subsequently normalized to peak 0.9. |
| Pulse_width | Legacy name. Passed as the pulse-train adaptation-time argument, not a literal impulse width. |
| Pulse_period | Legacy name. Rounded and used as the pulse-train interpolation depth (minimum 1), not an acoustic period. |
| Wet_dry_percent | Linear dry/wet blend, clamped to 0–100%. |
Output & channel behavior
- Name:
source_fibonacci_Preset. - Mono input: produces stereo output because the mono source is convolved with the stereo Fibonacci IR; the dry path is duplicated to L/R.
- Stereo input: remains stereo.
- 3+ channels: channel count is preserved; the script alternates the left and right IRs across channels (L pattern on odd channels, R pattern on even channels).
- Duration: approximately source duration + IR duration, limited by the actual N+M−1 convolution result.
- Sample rate: preserved.
- Peak handling: attenuate-only ceiling at 0.95. Signals below 0.95 are not boosted.
- Time origin: the private processing copy is shifted to zero; a non-zero source
xminis not restored in the output. - Keep_IR: retains
IR_fibonacci_Preset.
Visualization
The Dry and Result waveforms are autoscaled independently. The IR Taps panel plots the nominal Fibonacci times before random jitter. It is therefore a structural reference diagram, not a literal plot of the realized PointProcess used in that run. The Info window reports how many jittered points were actually accepted on each side.