NEL FFT Suite User Guide
NEL FFT Suite User Guide
NEL FFT Suite User Guide
TM �
NEVERENGINE LABS
This guide was compiled by Cristian Vogel based on technical documentation
originally authored by Cristian Vogel and Gustav Scholda.
Many thanks to all the subscribers to the WireFrames Lab who supported and
motivated us, and of course the biggest thanks to Carla Scaletti and Kurt Hebel
the creators of Kyma for their massive support and for having created the
awesome Kyma sound design environment upon which all our work is based.
The NEL FFT Suite consists of 9 processors and 21 sound design examples that all use
advanced FFT techniques to shift, smear and blur audio at high quality and in realtime. The
processors were all made using our own WireFrames library, which was developed during the
NeverEngine Labs 'WireFrames Lab' in 2017. Many thanks to all the subscribers who
supported our work during the development phase.
What is FFT?
That is a very pertinent question, but we are not going to go into it in here. Instead, we refer
you to a very good article that tries to explain the Fourier Transform in very simple terms.
https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/
You may also feel like watching Pete Johnstons' entertaining presentation from KISS2016
https://vimeopro.com/symbolicsound/kiss2016-presentations/video/190487545
The Fast Fourier Transform is a computationally efficient Fourier Transform used widely in
signal processing. In Kyma there is one core prototype which 'takes an input from the time
domain and produces an output signal in the frequency domain or vice versa' - simply called
FFT. We started there and added special processing techniques to manipulate the phases
and magnitudes of a complex signal in the frequency domain, before transforming it back to
the time domain. All our processors work on that level. As this type of programming can be
quite tricky to understand we have encapsulated our favourite treatments as user friendly
custom Classes that create fantastic high quality sound design from any given source.
The Classes are:
The processors are excellent at blurring and stretching, shifting and evolving any audio
source. They are highly efficient, and have all been tested to run on the Paca and
Pacarana at up to 96K and up to the maximum FFT window length of 16384 samples. If
you want to use high sample rates like 96kHz please keep in mind that this will change
the resolution of the FFT processors which always distributes bins between 0 and
halfSampleRate Hz. If you double the sample rate you also need to double the FFTSize
to get the same result e.g. 48 kHz @ 4096 is equal to 96 kHz @ 8192. In general you
should consider if higher sample rates than 48kHz are really needed. The only reason to
do it is if you are working with sample sources recorded at that sample rate.
NEL FFT HighOrderFormantShift
Very efficient high quality formant/pitch shifter.
First order is standard range, but you can shift higher or lower
by defining the Order constant before running. For example an
Order of 2 doubles the shift range, an Order of 3 doubles it again
and so on.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately.
ShiftFormants
positive values pitch shift formants upwards, negative values pitch shift formants
downwards. 0 means no shifting.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quite different in
quality.
Stereo
Builds the stereo version of the processor when checked
Gain
Output gain after processing.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
Input
Add an input. If stereo each side will be processed seperately. If mono, then a stereo blur will
still be generated.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Order
First order is standard range, but you can shift higher or lower by defining the Order
constant before running.
For example an Order of 2 doubles the shift range, an Order of 3 doubles it again and so on.
NEL FFT DeepBlur
NEL DeepBlur is an advanced FFT spectral blur effect.
Experiment with different input sources and different FFT
sizes for discovering what range of sounds the algorithm
can generate. Live inputs will also work fine.
Another unique feature of our FFT blur design, which comes from the NEL WireFrames
technology at its core, is that each of the FFT bands can offset the start time of its blurring
interval individually. Each of the FFT bands can also have a different time constant for the
blurring, in relation to the main TimeConstant. These complex algorithms dealing with many
hundreds or thousands of FFT bands, have been simplified and presented as two Spread
parameters. Negative and positive values should be explored to alter the distributions of the
blur onset times and time constants. Use the Reset parameter to pull the start time
distributions back to the same point.
You can also shift spectrum formants up and down before the blurring takes place.
Additionally when working with the stereo version, optional mid side stereo width
processing becomes available.
There are two modes; X4 and X2. The X4 version is a richer sounding processor but is less
efficient than the X2 version. The X4 model uses more internal delay lines than the X2 model.
In fact, some extra parameters will become available in X4 mode, allowing for
unconventional sound design effects using the extra the delay lines.
You also must choose True Stereo or Mono processing. True Stereo processes both channels
of the Input audio separately. In stereo mode, an optional width control will become
available. If you need to squeeze a bit of extra DSP, you can switch this feature off.
TIP: The X4 stereo version has been tested at 96K on a Paca with a live input or Sample as an
input. You will need to disable the Width processor and ignore the OutOfRealtime message
to repeat this at 96K.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. 1 means no attenuation, 0 is fully attenuated (silence)
ShiftFormants
positive values shift formants upwards, negative values shift formants downwards. 0 means
no shifting.
SpreadStartTimes
Negative and positive values should be explored to alter the distributions of the blur onset
times
DelayMod
A sound design feature which modulates internal delaylines using Fractal Noise.
SpreadTimeConstants
Negative and positive values should be explored to alter the distributions of the blurring
time constant over all the FFT bands at once.
DelayScale
Only becomes available in the X4 Version.
A sound design feature which modulates internal delaylines of the FFT. Generally leave set
to 1 for smooth blurring, but some cool chopping effects can emerge when set to low values.
Stereo
True Stereo processes both channels of the Input audio seperately. In stereo mode, an
optional width control will become available. If you need to squeeze a bit of extra DSP, you
can switch this feature off.
Feedback
Only becomes available in the X4 Version.
A sound design feature which modulates internal delaylines of the FFT.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quote different in
quality. FFT Size examples: 1024, 2048, 4096, 8192, 16384
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Freeze
A sound design feature which modulates internal delaylines of the FFT. Generally leave set
to 1 for smooth blurring, but some cool chopping effects can emerge when set to low values.
TimeConstant
The base time constant in seconds defining the interval for the blurring (or freezing)
Gain
Make up gain on the output after all processing
X2
In this efficient X2 version, an internal 2x FFT overlapping takes place whilst phases are
randomised using carefully tuned parameters to create the deep blur
Input
Add an input. If stereo each side will be processed seperately. If mono, then a stereo blur will
still be generated.
X4
The X4 version is a richer sounding processor but is less efficient than the DeepBlurX2
version.
Reset
Use the Reset parameter to pull the start time distributions back to the same point.
Seed
choose a unique seed any positive value below 1.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. 0 represents full attenuation to zero, 1 is no attenuation.
SmoothAttackTime
Attack smoothing time in seconds
BypassFormantShift
If you need even more efficiency you can bypass the formant shift to do only FFT BiSmooth.
Through delay time will be shortened by FFTLength/2 samp
SmoothDecayTime
Decay smoothing time. Internally multiplied by 10.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quite different in
quality.
Stereo
Builds the stereo version of the processor when checked
Gain
Output gain after processing.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
Input
Add an input. If stereo each side will be processed seperately. If mono, then a stereo smooth
will still be generated.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Seed
choose a unique seed any positive value below 1 for the random phase distribution.
ShiftFormants
positive values pitch shift formants upwards, negative values pitch shift formants
downwards. 0 means no shifting.
Model
1: Both stereo channels share same walks (most efficient)
3: !Distribution spreads the StepSize of each path (in all other Models, !Distribution spreads
the TimeConstants)
4: Both stereo channels and each order of Formant Shift has independent stochastic
modulations (least efficient)
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. It is generally recommended to attenuate quite a bit to
avoid clippling inside the FFT. 1 is no attenuation, 0 means full attenuation (silence)
Order
First order is standard range, but you can shift higher or lower by defining the Order
constant before running. For example an Order 2 doubles the shift range, an Order of 3
doubles it again and so on.
ScaleWalk
Alter the overall effect of the walks.
Distribution
Spreads the distribution of TimeConstants (in Model 1,2 and 4) . Spreads the distribution of
StepSize in Model 3. Can be full range -1,1.
Seed
An initial value for the noise source, for repeatable random walking.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quite different in
quality.
ShiftFormants
Positive values pitch shift formants upwards, negative values pitch shift formants
downwards. 0 means no shifting.
Gain
Output gain after processing.
StepSize
The maximum size of the random walk step each !timeconstant
InitialDeviation
Defines the maximum deviation of each random walk from 0 when they are initialised.
When InitialDeviation is set to 0, all random walks will start from 0.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
Initialise
Re-initialises the RandomWalks when positive
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Input
Add an input. If stereo each side will be processed seperately. If mono, then a stereo image
will still be generated.
TimeConstant
This represents the maximum duration a single walk takes to reach its new value in seconds.
JoinTogether
Turn this on to let the random walks join together towards their average value.
By increasing the !CloudDelay or !CloudFeedback parameters, each FFT band (which could be
thousands) begins to de-correlate itself from the basic delay or feedback factor. In this way,
some FFT bins might begin to feedback more than others, or find their own shorter or
longer delay time. The whole cloud effect is affected by the !Damping parameter.
Finally, you can formant shift and then smooth the entire cloud.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. 1 means no attenuation, 0 is fully attenuated (silence)
ShiftFormants
positive values shift formants upwards, negative values shift formants downwards. 0 means
no shifting.
CloudDelay
By increasing the !CloudDelay parameter, each FFT band (which could be thousands) begins
to de-correlate itself from the base delay factor.
CloudFeedback
By increasing the !CloudFeedback parameters, each FFT band (which could be thousands)
begins to de-correlate itself from the base feedback factor.
Stereo
True Stereo processes both channels of the Input audio seperately. In stereo mode, an
optional width control will become available. If you need to squeeze a bit of extra DSP, you
can switch this feature off.
Feedback
The base feedback parameter.
CloudTimeConstant
This is the rate of change of the cloud which will begin to affect the multiple delays and
feedbacks when cloud delay or cloud feedback increases
Smoothing
Additional BiSmooth after the cloud
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quote different in
quality. FFT Size examples: 1024, 2048, 4096, 8192, 16384
Damping
The !Damping parameter affects how the feedback decays in terms of colour and amplitude
slope.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Gain
Make up gain on the output after all processing
Delay
The base delay time is set by this paramater
Input
Add an input. If stereo each side will be processed seperately. If mono, then a stereo blur will
still be generated.
NEL FFT SpectralAnnealing
Simulated Annealing is an algorithm which has roots in
the metallurgical process of annealing , a technique
involving heating and controlled cooling of a material to
increase the size of its crystals and reduce their defects.
For example: an input value of 0.3 gets compared to a comparison input of 0.4. Since there
have been no other comparison values yet the output will be 0.4. In the next iteration the
comparison value is 0.25. The output will be 0.25 since there's less difference to the input
value. If the comparison value would have been 0.15 the output would stay at 0.4 (since it is
the best approximation yet). One iteration equals 1 FFT frame and each bin of that frame
gets compared individually.
Experiment with different input sources and different FFT sizes for discovering what range
of sounds the algorithm can generate. Live inputs will also work fine.
Annealing
Introduce the annealing algorithm. At 0 there is no simulated annealing and you will not hear
any output.
Seed
Choose a unique seed any positive value below 1.
ShiftFormants
positive values shift formants upwards, negative values shift formants downwards. 0 means
no shifting. Shifting happens before smoothing.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. 1 means no attenuation, 0 is fully attenuated (silence)
Stereo
When true will build the Stereo input and output version
DampHighs
Tame some of the high frequencies by turning this value up
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quote different in
quality. FFT Size examples: 1024, 2048, 4096, 8192, 16384
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP if
needed.
Input
Add an input. If stereo each side will be processed separately. If mono input, stereofy by
building two Mono instances of this effect with different seeds.
This exotic subtractive processor, can occasionally reach a point where all the
random walks happen to be clustered above the masking threshold , where you might
not hear anything at first. Either increase step size or step frequency and hear FFT bands
emerge into the audio output, according to the fade in and fade out values. Or if you are
feeling impatient, you can re-initalise the random walks with a high initial deviation setting
to re-distribute them.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. It is generally recommended to attenuate quite a bit to
avoid clippling inside the FFT.
Masking
Turn up the ammount of masking.
Seed
An initial value for the noise source, for a repeatable random walk.
FadeInTime
Time taken for each FFT band to fade in smoothly, once it is unmasked.
ShiftFormants
Positive values pitch shift formants upwards, negative values pitch shift formants
downwards. 0 means no shifting.
FadeOutTime
Time taken for each FFT band to fade out smoothly, once it is masked.
StepSize
The maximum size of the random walk step each !timeconstant
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quite different in
quality.
Stereo
Builds the stereo version of the processor when checked
Gain
Output gain after processing.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Initialise
Re-initialises the RandomWalks when changing from zero to positive value
InitialDeviation
Defines the maximum deviation of each random walk from 0 when they are initialised.
When InitialDeviation is set to 0, all random walks will start from 0.
TimeConstant
This represents the maximum duration a single walk takes to reach its new value in seconds.
Input
Add an input. If stereo each side will be processed seperately. If mono input, stereofy by
building two Mono instances of this effect with different seeds.
JoinTogether
Turn this on to let the random walks join together towards their average value.
NEL FFT HoltWintersSmooth
NEL HoltWinters Smoothing is an advanced FFT spectral
smoothing effect. Also known as double exponential
smoothing the Holt-Winters Smoother takes into
account the possibility of a series exhibiting some form
of trend. The trend can also be smoothed.
You can also shift spectrum formants up and down before the blurring takes place.
Additionally you can choose internal level limiting and, when working with the stereo
version, mid side stereo width processing.
HoltWintersSmooth
Amount of HoltWinters Smoothing. Full range values from -1 to 1 will tilt the smoothing
across the Spectrum in different ways. At 0 there is no smoothing.
HoltWintersTrend
Amount of smoothing on the Trend. Full range values from -1 to 1 will tilt the smoothing
across the Spectrum in different ways. At 0 there is no smoothing. Will only become really
noticeable once the HoltWintersSmooth parameter gets above 0.5 or below -0.5.
Stereo
When true will build the Stereo input and output version
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately.
DampHighs
Tame some of the high frequencies by turning this value up
Seed
choose a unique seed any positive value below 1.
ShiftFormants
positive values shift formants upwards, negative values shift formants downwards. 0 means
no shifting. Shifting happens before smoothing.
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quote different in
quality. FFT Size examples: 1024, 2048, 4096, 8192, 16384
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP if
needed.
Input
Add an input. If stereo each side will be processed seperately. If mono input, stereofy by
building two Mono instances of this effect with different seeds.
MelScale
When true, the upper frequencies will be selected from Beranek 1949 mel scale data from
Stevens and Volkmann 1940 ( 160 670 1420 2450 4000 6600 14000 Nyquist) when false,
then an Octave divison will be used (250 500 1000 2000 4000 8000 16000 Nyquist)
ShiftBands
Array of 7 hotvalues for each band. All expressions must be in curly brackets.
eg: { !LevelBand1 smooth: 3 s }
LevelBands
Array of 7 hotvalues for each band. All expressions must be in curly brackets.
eg: { !LevelBand1 smooth: 3 s }
SmoothBands
Ammount of smoothing for band. Uses exponential smoothing, so a 1 will be almost
completely frozen. Needs an array of 7 hotvalues for each band. All expressions must be in
curly brackets.
eg: { !SmoothBand1 * !bypass }
Note: When smoothing is high (up close to 1) then level and shift modulations may take a
while to manifest at the output. Use this as a feature to make gradual morphs.
Attenuate
Attenuate the input source before the FFT processing. If your TimeConstant is long, you may
not hear the effect immediately. 0 represents full attenuation to zero, 1 is no attenuation.
Seed
choose a unique seed any positive value below 1 for the random phase generator
FFTsize
Select an FFT size from 256 up to 16384 .. different FFTSizes will sound quite different in
quality.
Stereo
Builds the stereo version of the processor when checked
Gain
Output gain after processing.
StereoWidth
Internal mid side encoder allows you to adjust the stereo width after processing.
Input
Add an input. If stereo each side will be processed seperately. If mono, input and module
processing is stereo, then a stereo image will be generated.
StereoWidthProcessor
Activate the internal mid side stereo width processor. Turn it off here to save on some DSP
when replicating.
Support:
support@neverenginelabs.com