Giant FFT Recomposer — User Guide
Treats the complete selected Sound as one global complex spectrum and artistically recomposes the relationship between magnitude, phase and frequency — without STFT frames or external processing engines.
What this does
Giant FFT Recomposer converts the entire Sound — plus an optional appended silent tail — into one complex Fourier spectrum. Instead of analyzing a succession of short windows, it treats the whole duration as a single frequency-domain object. Each preset then changes phase, spectral magnitude, frequency-bin placement, or a combination of these, followed by one inverse transform back to audio.
Key features:
- 14 named transformations + Custom — phase dissolution, phase quantization, spectral sparsification, drift, reflection, folding, magnitude mutation and hybrid modes.
- True global complex-spectrum processing — one Fourier transform per channel, not a sequence of frames.
- Spectral tail — optional silent extension gives transformed energy somewhere to emerge beyond the original duration.
- Mono and stereo support — stereo channels are processed independently while random-phase fields may be shared or decorrelated.
- Body-based RMS preservation — optional gain matching uses only the original-duration portion, so a long quiet tail does not cause excessive gain.
- Fast or exact-length FFT — Praat can zero-pad to a power-of-two for speed and the result is trimmed back afterward.
- Diagnostic visualization — source waveform, transformed body/tail, global magnitude spectra, transformation profile and summary strip.
- No external dependencies — processing is entirely native Praat.
Quick start
- Select exactly one mono or stereo Sound in Praat.
- Run
Giant_FFT_Recomposer.praat. - Choose a preset. The form opens on Phase Mist.
- Leave Transformation_depth = 0.60, Tail_duration_s = 1.50, Preserve_RMS = yes, Fast_FFT = yes and Create_visualization = yes for a first test.
- Click OK. The result is named
source_GiantFFT_PresetName. - Compare the source and the transformed waveform, then inspect the global spectrum and transformation profile in the Picture window.
Why one giant FFT?
A short-time Fourier transform localizes spectrum in time by analyzing many overlapping windows. Giant FFT Recomposer deliberately removes that local segmentation. If the extended signal is x[n], the script computes one complex spectrum X[k], transforms its magnitude and/or phase, then reconstructs the complete signal with one inverse transform.
Complex spectrum
DC and a real Nyquist bin are protected in the polar-reconstruction modes. This preserves the real-signal constraints required by the inverse transform.
Presets
The preset menu contains fourteen named transformations plus Custom. A preset overrides only the parameters needed by that mode; unrelated form fields may remain visible without affecting the selected transformation.
| Preset | Main operation | Effective preset settings | Character |
|---|---|---|---|
| Original Structure | Copies the original complex spectrum | depth = 0 | Reference reconstruction through the same global-FFT path. |
| Phase Mist | Moves each bin phase toward a random phase target | depth 0.55; phase disorder 0.55 | Soft global temporal diffusion. |
| Deep Dissolution | Full random-phase attraction | depth 1.0; phase disorder 1.0 | Strong destruction of original temporal organization while retaining magnitude. |
| Phase Crystal | Quantizes phase toward discrete angular states | depth 0.75; disorder 0.90; 8 states | Faceted, structured phase reorganization. |
| Phase Gravity | Pulls phase toward multiples of π/2 | depth 0.80; gravity 0.90 | Strong four-state phase attraction. |
| Spectral Skeleton | Attenuates bins below a global magnitude threshold | depth 0.90; density 0.18 | Sparse spectral framework dominated by strong components. |
| Constellation | Keeps/emphasizes strong local spectral peaks and suppresses the rest | depth 0.90; density 0.10; peak contrast 1.80 | Isolated spectral points and resonant traces. |
| Spectrum Drift | Circularly shifts interior spectrum bins | depth 0.80; drift 300 Hz | Frequency translation by bin remapping. |
| Spectral Mirror | Blends each bin with its reflection around the pivot | depth 0.90; reflection amount 0.95; pivot from form | Symmetric redistribution around a chosen frequency. |
| Spectral Fold | Triangular frequency folding around the pivot interval | depth 0.90; fold amount 0.95; pivot from form | Repeated fold-back of upper spectral regions. |
| Magnitude Mutation | Blends the magnitude spectrum with a reversed magnitude profile | depth 0.85; magnitude amount 0.90 | Low/high spectral energy exchange while retaining original phase. |
| Global Freeze | Smooths magnitude across adjacent bins and randomizes phase | depth 0.90; random-phase amount depends on depth | Globally smeared, suspended spectral texture. |
| Giant Collapse | Spectral sparsification + π/2 phase gravity | depth 0.95; density 0.15; gravity 0.95 | Compressed sparse spectrum with strongly reorganized time structure. |
| Radical Recomposition | Drift + sparsification + phase scaling | depth 0.90; phase scale 2.20; drift 280 Hz; density 0.20 | Combined large-scale recomposition. |
| Custom | User-defined staged chain | Uses the relevant form values | Phase transform → optional sparsification → optional magnitude mutation → optional drift. |
Pivot_frequency and Fold_depth do not participate in the Custom chain. The pivot is used by the dedicated Mirror and Fold presets.
Transformation modes
Phase Mist / Deep Dissolution
A random target phase is generated for every spectral bin. The original phase moves toward that target along the shortest wrapped angular path.
Magnitude is unchanged. At full amount, each processed bin adopts the random target phase.
Phase Crystal
Each original phase is attracted toward the nearest one of Phase_states equally spaced angular states.
The preset fixes eight states; Custom can use another value when Phase_mode = Quantize (crystal).
Phase Gravity
Phase is pulled toward the nearest multiple of π/2, giving four preferred angular states. In this mode Phase_disorder is not used; the internal gravity amount and Transformation depth determine the attraction.
Time Morph (phase scale)
Used by Custom and Radical Recomposition. Global phase is multiplied by an interpolated scale factor:
This is a phase-domain transformation, not conventional time stretching.
Spectral Skeleton
The strongest magnitude in the complete spectrum defines a global retention threshold. Bins below the threshold are attenuated by 1 - depth.
Bin_density is an artistic retention control, not an exact percentage of retained bins. Higher density lowers the threshold and retains more spectral content.
Constellation
Only local magnitude peaks that also exceed a global threshold receive emphasis; other bins are attenuated. It therefore extracts and exaggerates a set of strong spectral points rather than merely retaining a fixed number of bins.
Spectrum Drift
The interior spectrum is circularly shifted by approximately Frequency_drift × depth Hz. Positive drift moves content upward in frequency. DC and the real Nyquist bin remain fixed.
Spectral Mirror
Each eligible complex bin is blended with the complex bin reflected around Pivot_frequency. If the reflected location falls outside the valid interior range, the original bin is left unchanged.
Spectral Fold
A triangular bin map repeatedly folds the frequency axis back through the interval defined by the pivot, then blends the folded spectrum with the original. The result is different from a single reflection: higher-frequency regions can fold repeatedly into lower positions.
Magnitude Mutation
The magnitude profile is blended with the same profile reversed across the complete one-sided spectrum, while the original phase is preserved.
This operation does not use Pivot_frequency.
Global Freeze
Magnitude is first smoothed with a 1–2–1 three-bin kernel, blended with the original according to depth, and combined with a partially randomized global phase field. The operation can strongly smear temporal structure without requiring any STFT freezing process.
Giant Collapse
Combines the Skeleton retention rule with π/2 phase gravity. Weak bins are attenuated while the remaining spectrum is driven toward a highly constrained phase organization.
Radical Recomposition
Combines three stages around a drifted source map: frequency drift, threshold-based spectral retention, and phase scaling. It is deliberately more composite than the single-focus presets.
Parameters
| Parameter | Default | Valid range / role |
|---|---|---|
| Preset | Phase Mist | 14 named modes + Custom. |
| Transformation_depth | 0.60 | 0–1. Global interpolation/attenuation depth. Most presets override this value. |
| Phase_disorder | 0.50 | 0–1. Used by random-mist and phase-crystal attraction; not by Phase Gravity. |
| Phase_mode | Random mist | Random mist / Quantize / Gravity / Time morph. Used by Custom. |
| Phase_states | 8 | At least 2. Number of quantized states for Custom crystal mode; Phase Crystal preset fixes 8. |
| Phase_scale | 1.50 | Phase multiplier target for Custom Time morph; Radical fixes 2.20. |
| Bin_density | 0.30 | >0 to 1. Controls threshold severity for Skeleton-like retention. It is not an exact retained-bin fraction. |
| Magnitude_amount | 0.00 | 0–1. Optional magnitude reversal blend in Custom; Magnitude Mutation preset fixes 0.90. |
| Pivot_frequency | 1000 Hz | >0 and below Nyquist. Used by Spectral Mirror and Spectral Fold. |
| Frequency_drift | 200 Hz | Drift amount for Custom; dedicated drift presets override it. |
| Fold_depth | 0.50 | 0–1. Fold blend parameter, but Spectral Fold preset currently overrides it to 0.95. |
| Dry_wet_mix | 1.00 | 0–1. Mix transformed output with the extended processing source by sample index. |
| Tail_duration_s | 1.50 s | ≥0. Silent duration appended before the global FFT. |
| Fadeout_duration_s | 1.00 s | ≥0. Half-cosine fade applied only to the appended tail; limited to Tail_duration_s. |
| Decorrelate_channels | Off | For stereo random-phase modes, choose shared or independent phase fields. |
| Preserve_RMS | On | Match output-body RMS to source RMS before final peak safety scaling. |
| Fast_FFT | On | Praat zero-pads to a power-of-two internally for speed, then the script trims the IFFT result back to the exact processing duration. |
| Create_visualization | On | Draw the Praat AudioTools diagnostic page. |
| Keep_Spectrum_objects | Off | Keep source and wet Spectrum objects for each processed channel. |
| Play | On | Play the final result after processing. |
| Random_seed | 0 | 0 = unpredictable. Positive values reproduce random phase fields; with channel decorrelation, channel number offsets the seed. |
Spectral tail, dry/wet mix & level
Why append silence before the FFT?
Global phase recomposition can relocate energy later in the reconstructed signal. If the transform were computed only over the original duration, that energy would have no explicit post-source region in which to appear. The script therefore optionally concatenates silence before taking the FFT.
The fade is a half-cosine applied only to the end of the appended region. The original-duration body is never attenuated by this tail fade.
Dry/wet behavior
The dry reference for mixing is the extended processing source: original sound followed by the same appended silence. Therefore every mix setting keeps the extended duration whenever Tail_duration_s is greater than zero.
RMS preservation
When Preserve_RMS is enabled, the source RMS is compared with the RMS of only the output's original-duration body. The entire result is then scaled by that ratio. The appended tail is deliberately excluded from the measurement.
Stereo behavior
Left and right channels are transformed separately with the same selected mode and parameters. Deterministic operations therefore preserve channel-specific spectral differences while applying the same rule to both channels.
The setting matters only when a mode actually requests random phase: Phase Mist, Deep Dissolution, Global Freeze, and Custom when Phase_mode is Random mist.
For stereo diagnostic spectra, the visualization and centroid report use channel 1 (left), while the waveform panels draw the complete stereo Sounds.
Visualization
With Create_visualization enabled, the Picture window uses the current Praat AudioTools visualization convention.
| Panel | What it shows | Interpretation |
|---|---|---|
| A — Source waveform | Original Sound on a shared amplitude scale | Neutral reference for the transformation. |
| B — Transformed output | Mauve original-duration body and rust appended spectral tail | Shows where transformed energy extends beyond the source and where tail fade begins. |
| C — Global Spectrum | Blue source vs amber transformed magnitude, same relative-dB scale | Shows true global spectral redistribution. Each plotted point is the maximum over a block of bins, so sparse peaks are not missed by decimation. |
| D — Transformation Profile | Wrapped phase displacement for phase-oriented modes, otherwise magnitude change in dB | Shows what the preset actually changed across frequency. |
| Summary strip | Preset, depth, FFT mode, mix, tail, centroid, RMS, peak, duration and processing time | Compact numerical context for the plots. |
Applications
Temporal dissolution without changing spectral magnitude
Use Phase Mist or Deep Dissolution. These are useful when the goal is to retain the source's overall spectral-energy distribution while radically reorganizing its time-domain identity.
Sparse spectral composition
Use Spectral Skeleton, Constellation or Giant Collapse to reduce dense material toward a smaller set of strong spectral components.
Frequency-axis recomposition
Use Spectrum Drift, Spectral Mirror, Spectral Fold or Magnitude Mutation when the goal is to alter where spectral energy sits rather than primarily changing phase.
Hybrid transformation
Use Radical Recomposition or Custom when several global operations should interact. In Custom, start with one active stage at a time so the contribution of phase, sparsification, magnitude mutation and drift remains audible.
Long transformed resonance after the source
Increase Tail_duration_s before using strong phase transformations. The tail does not synthesize a reverb by itself; it extends the global transform domain so recomposed energy can occupy time beyond the original ending.
Troubleshooting
This is expected when Tail_duration_s > 0. Set it to 0 for original duration.
Shared random phase can pull both channels toward the same phase pattern. Enable Decorrelate_channels when independent channel phase fields are desired.
This is intentional. The parameter controls a dB threshold relative to the strongest bin; it is not a percentile calculation.
Pivot_frequency is used by Spectral Mirror and Spectral Fold. It is not part of the Custom chain or most other presets.
The current Spectral Fold preset explicitly sets its effective fold amount to 0.95. The form value is therefore not used by that preset.
It only controls modes that generate a random phase field. Deterministic transformations ignore it.
This is expected: Praat zero-pads to a power-of-two when Fast_FFT is enabled. The inverse result is trimmed to the exact extended processing duration before mixing and output.