(max) fft patcher dump

It’s the end of the year, and a not a lot of time before the final project is due, but here are the fft patchers for your reference. They may still help you with some reference materials.

example patchers

All patchers are in an fft folder. You may just want to download that to have all parent and pfft~ subpatchers.

Individual files will be listed with each example description.

fft pass through

  • <FFT-Pass.maxpat> and <justPassingThrough~.maxpat>

<FFT-Pass.maxpat> demonstrates the basics of using the [pfft~] object, [fftin~] and [fftout~] objects as inlets and outlets, inlet/outlet numbering, and how [pfft~] handles other forms of messages. Pay particular attention to the difference in inlets/outlets for converting audio to the frequency domain and back to time, and how inlet/outlets are numbered.

In this example, the [pfft~] object contains a spectral processing sub-patcher (<justPassingThrough~maxpat>), and has arguments specifying the FFT size (2048) and number of overlaps (2). [pfft~] works similarly to [poly~], in that as many instances of the sub-patcher will be loaded as specified in the number of overlaps. The sub-patcher merely converts the audio to the frequency domain and back to the time domain, while also allowing two number messages to pass through unchanged.

cross synthesis

  • <FFT-CrossSynth1.maxpat> and <crossSynth1~.maxpat>

There implementation here is simple cross synthesis, where the real and imaginary signals of two signals converted to frequency domain are multiplied together, and the result is converted back to the time domain. Since the signals are multiplied in the frequency domain, some consider this process to be convolution. However, this isn’t true convolution, as neither signal is converted from Cartesian (x,y) coordinates to polar (amp, phase) values. That will come next.

Remember, since multiplication is taking place, both signals need to have amplitude present for any output to be heard.


  • <FFT-Convolution.maxpat>, <convolution1~.maxpat> and <convolution2~.maxpat>

Two implementations of convolution are demonstrated. The first is less CPU intensive.

[convolution1~.maxpat] converts the Cartesian (x,y) representation of the frequency domain signal of the second audio input to polar values (amp, phase) using [cartopol~]. Since amplitude information is in both the real and imaginary values of the first signal, only one [cartopol~] is needed, and no subsequent conversion from [poltocar~] is needed.

[convolution2~.maxpat] converts both frequency domain signals to polar values, multiplies the amplitudes and adds the phases as true convolution should do, then converts the resulting amp/phase values back to Cartesian with [poltocar~]. You can compare the audio results of each process, which sound extremely similar.