Plugin idea - FFT Summing
-
- KVRian
- 620 posts since 13 Aug, 2005
Handling the phase differences between the two tracks would likely require some special handling.
If the track waveforms are not highly correlated then running an FFT on each track separately would likely result in the phase values for a given bin being different between the 2 frames (depending on the exact specific frequency represented in the bin values). So the single "phase" value provided to the iFFT would have to be computed (possibly averaging, linear interp, running phase sum, random?, etc.) or selected from either of the original track FFT bin (imposing the phase of one track on the other).
If the track waveforms are not highly correlated then running an FFT on each track separately would likely result in the phase values for a given bin being different between the 2 frames (depending on the exact specific frequency represented in the bin values). So the single "phase" value provided to the iFFT would have to be computed (possibly averaging, linear interp, running phase sum, random?, etc.) or selected from either of the original track FFT bin (imposing the phase of one track on the other).
- KVRAF
- 9563 posts since 6 Jan, 2017 from Outer Space
Could be interesting to have separate balance controls for bin amp and phase. Maybe even for each bin.
I should start to experiment…
I should start to experiment…
-
- KVRist
- 484 posts since 8 May, 2007
In the original post, it is ambiguous as to what is to be done with the phases, but assuming that they are to be ignored, discarded, all set to zero or other fixed value, or some similar type of action, the following should be relevant:
Re(iFFT(Magnitude(FFT(A)) + Magnitude(FFT(A delayed by X samples)))) => Spike at t = zero with noise following if the signal A is real-valued. Another spike at the end. The same result is true for A by itself. Essentially this causes all of the sinusoidal components of A to start at t = zero and come back together at the end. The result is similar to an IR followed by a reverse-time version.
Needless to say, this would not work if intended as a method to simply prevent comb filtering, for example caused by combining an audio recording with a slightly delayed version.
Re(iFFT(Magnitude(FFT(A)) + Magnitude(FFT(A delayed by X samples)))) => Spike at t = zero with noise following if the signal A is real-valued. Another spike at the end. The same result is true for A by itself. Essentially this causes all of the sinusoidal components of A to start at t = zero and come back together at the end. The result is similar to an IR followed by a reverse-time version.
Needless to say, this would not work if intended as a method to simply prevent comb filtering, for example caused by combining an audio recording with a slightly delayed version.
- KVRAF
- 9563 posts since 6 Jan, 2017 from Outer Space
Though I think, as soon you tinker with the phase you probably smear all transients…
-
- KVRist
- 484 posts since 8 May, 2007
In my Classic series of amp sims, the Width control calculates the FFTs of the incoming Left and Right signals, then randomizes the phase by an amount that is subject to various controls determining the distribution type, the random number seed, the maximum amount of deviation, etc. It worked pretty well, but with larger and larger randomization and deviations, a drone type of sound is eventually produced, as you described. The constituent sine waves have decreasing correlation as the randomization and deviations increase.Tj Shredder wrote: Thu Jan 01, 2026 10:26 pm Though I think, as soon you tinker with the phase you probably smear all transients…
-
- KVRist
- Topic Starter
- 267 posts since 11 Sep, 2005
On the Plogue Bidule Spectral utilities, it separates phase/magnitudes in a way, that the summing in magnitude is perfect, using either original phase.
Unfortunatly the algorithm fails after a couple minutes playing.
Unfortunatly the algorithm fails after a couple minutes playing.
-
fineincrements fineincrements https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=780291
- KVRist
- 43 posts since 3 Jan, 2026 from Los Angeles
the catch is phase isn't just throwaway data - it's all your timing/transient info. iFFT with arbitrary phase = smeared vocoder-y mess. You'd be trading comb filtering for different artifacts.
BUT there's a version that could actually work: coherence-weighted phase interpolation. Basically detect which freq regions are "same source, phase-shifted" vs actually different content. High coherence - align the phases. Low coherence - just pick one. Then sum magnitudes with this hybrid phase.
Existing tools like Auto-Align do per-band phase correction but not really this kind of spectral blending. Could be a cool experiment - whether it sounds "good" or just "different" is another question lol.
BUT there's a version that could actually work: coherence-weighted phase interpolation. Basically detect which freq regions are "same source, phase-shifted" vs actually different content. High coherence - align the phases. Low coherence - just pick one. Then sum magnitudes with this hybrid phase.
Existing tools like Auto-Align do per-band phase correction but not really this kind of spectral blending. Could be a cool experiment - whether it sounds "good" or just "different" is another question lol.
Seth — Fine Increments
Wavefield (wavetable-based spectral filter): https://www.fineincrements.com/wavefield
Free wavetable generator:
https://www.fineincrements.com/free-wavetable-generator
Wavefield (wavetable-based spectral filter): https://www.fineincrements.com/wavefield
Free wavetable generator:
https://www.fineincrements.com/free-wavetable-generator
