This project is still a work-in-progress. Expect bugs, malfunctions, and generally bad code.
Created by Ian Doherty, January 2025 - February 2025
This Pure Data external convolves an input source signal with a preloaded impulse response file in real-time. The convolution is not partitioned: the delay in the output signal is thus a direct result of the length of the impulse response. Fast convolution (point-wise multiplication of FFTs) is used to minimize computational cost.
This external was created as part of my senior capstone project at the University of Illinois.
Potential improvements for future iterations of this external:
- Use partitioning to reduce IR delay.
- Use a more sophisticated vector multiplication algorithm to speed up the convolution step. This could consist of SIMD and/or alignment tricks in C.
- Investigate if FFTW plans can be saved and reused in the object proper.
See below for installation instructions. For usage, refer to converb~-help.pd.
- If you haven't already, install PureData here.
- Clone this repo using
git cloneon a command line or download the source code manually. - Install FFTW3 here and modify the Makefile to suit your particular system.
- Windows: Ensure that you have mingw-64w installed on your system. Download the 64-bit precompiled version of FFTW. Place
fftw3.hinmsys64/usr/local/includeandlibfftw3f-3.dllinmsys64/usr/local/lib. The Makefile is already configured for Windows. - OSX/Linux: Download the FFTW tarball from their website. In the command line, navigate to the download folder and run
./configure CFLAGS="-fPIC" --enable-floatfor OSX or./configure CFLAGS="-arch i386 -arch x86_64" --enable-floatfor Linux. Next, runmakeandsudo make install. Finally, comment out the Windows line in the Makefile and uncomment the MacOSX / Linux line.
- Windows: Ensure that you have mingw-64w installed on your system. Download the 64-bit precompiled version of FFTW. Place
- In the installation folder of convolve~, run
makeon the command line (Windows users, use mingw-64w; see above). For a system-wide installation, runmake install. - Open
converb~-help.pdto learn the usage for converb~. Ifmake installwas used, you will be able to add converb~ objects into any PureData instance.- To view this in PureData, go to Help > Browser. converb~ should be listed.
- PureData: Everything!
- FFTW3: DFT generation
- convolve_tilde: Makefile design, FFTW3 usage, installation instructions
- pure-data/pd-lib-builder: Makefile generation
- bed~ by Eric Lyon: Handling garrays in the Pd external lib
- pure-data/externals-howto: Helpful guide used during the creation of this external