- Added convolverPipe, which filters the
standard input to the standard output (as opposed to convolverCMD, which
- convolverWMP registration
- Use FFTW 3.1.2 (which is faster and should run on more non-Pentium 4
- Disable "Lost filter" convolverVST error message, to give the user a
chance to select a filter
- convolverVST is now multi-channel
- Added GUI for convolverVST. Thanks to
Vera Kinter for some of the
- Fixed convolverCMD when number of input and output channels is
different. convolverCMD now outputs in float format. (Thanks to
- Released Intel C++ 9.1 (which may be faster on P4 machines) and VC++
- added mono convolverVST
- put up property page when no filter loaded, so that the user has an
opportunity to load filter first time through
- internal interface tidying
- relaxed DirectShow / DMO filter registration for compatibility with some
- set Measure as the default tuning rigour
- updated libsndfile to 1.0.16
- Save wisdom.fftw to host's home directory
- Estimated gain calculation
- ConvolverFilter initialization
- Peak gain calculation
- More robust updating of settings during playback
- Output initial half partition of silence (latency) explicitly for better
interoperability with some DirectShow hosts.
- 3% faster DFT (FFTW 3.1.1) Enable AMD K7 optimizations. Performance improvements for Intel EMT64
and large-size transforms with SIMD. SSE/SSE2 code disables itself on older
386 and 486
- Small optimizations (5%)
- libsndfile 1.0.15 (RIFX support)
- ConvolverWrapper / DScaler5 sync
- Sample reference time calculation
- More robust approach to setting changes while convolver is running
- Sync ConvolverWrapper variable buffer size changes
- Internal changes (eg, use boost numeric casting functions, FastArray
- ConvolverWrapper pin negotiation and buffer length fixes
- Dropdown list fixes
- Dithering and noise shaping fixes
- Moved to mingw-compiled libsndfile 1.0.14
- wisdom.fftw deposited only in startup directory
- Added more noise shaping types
- Corrected scaling of 32-bit PCM samples
- Some ergonomics tweaks to application of ConvolverFilter settings
- Added dithering and noise shaping capability
- Fixed initialization when no filter set
- More optimization
- Added ability to delay input channels (eg, for cross-talk cancellation applications).
This necessitates a change for existing config files.
- ConvolverFilter issues corrected
- Fix for perftest when running 0 partitions
- Greater safety when settings changed
- Added ability to delay output channels. This necessitates a change for existing
- Removed initial noise after calculating optimum attenuation in some circumstances.
- ConvolverCMD fixes.
- More small optimizations
- Removed the requirement that config files must end with a final blank line.
- Fixed bug when new filter incompatible with current playback setup selected.
- More small optimizations
- Time-limited tuning corrected
- Corrected bug introduced in 2.23 for multi-partition convolution
- Updated libsndfile and FFTW
- 2.22 compiled for Pentium III and below CPUs. Slightly faster even
on Pentium M and 4.
- Removed residual SIMD code that led to "Unexpected exception" notifications
on non-Pentium 4 cpus. Thanks to Simon George for fix
- Accept raw 64-bit float format filter files (.dbl). (Internal processing
is still 32-bit.)
- Clarification of some diagnostics
- Planning rigour limited to 1 minute per path
- Planning rigour resets to Measure, to avoid lengthy startup times
- Speed improvements, particularly for shorter filters
- New planning rigour option: limit tuning to 1 minute per path [actually
it is 2 minutes per path: this will be fixed in a future release]
- Fixed ConvolverFilter when more than one partition specified (bug introduced
- ConvolverWrapper media format negotiation and properties page fixes (bug
introduced in 2.17)
- Further optimizations
- Dropped Pentium 4 requirement: should run on all x86 cpus
- Bug fix for WAV file filter paths (you will need to recalculate attenuation)
- Speed improvements
- Allow WAV (or other libsndfile-compatible) files to be interpreted as filter
paths (without the need for a config text file). The source channels are convolved
with the corresponding channels of the WAV file (so not in matrix fashion).
- Allow a config file to comprise a list of filter path filenames, with automatic
selection of the first compatible filter path (by number of input and output
channels, sample rate)
- Speed improvements
- VC++ 2005 test build
- Internal optimizations. Intel C++ 9 compiler build.
- Allow multi-channel filter files to be used (specifying which channel is
to be used for a filter path through the config file)
- Allow tuning rigour to be set through the properties page
- Allow negative scaling factors (which allow phase shifting)
- Internal refactoring and cleaning up for future optimization.
- Corrected Convolver plug-in format checking bug introduced in 2.12
- Automatic zero padding of filter lengths for optimal FFTW performance
- Distribution package registers ConvolverFilter
- Added ConvolverFilter.filterdata and ConvolverWrapperDMO.filterdata files
for Zoom Player Pro
- First version of CTransformFilter-based ConvolverFilter implemented to provide
an alternative, but functionally equivalent, DirectShow filter to ConvolverWrapper.
- Crashing bugs in calculation of optimum attenuation and ConvolverWrapper
access to property page fixed
- Optimizations (5% improvement)
- Further internal tweaks for IMediaObject compatibility (according to DMOTest),
- Exclude VERSION.dll, comdlg32.dll and msdmo.dll from distribution; they
should be on the target system already.
- Wider range of playback formats supported (in order of preference: 32-bit
IEEE float , 32, 24, 16 and 8-bit PCM, 24, 20 and 16-bit PCM in 32-bit containers,
20 and 16-bit PCM in 24-bit containers, and 64-bit IEEE float)
- Require specification of channel to speaker mapping in config file
- Show convolver icon on status bar
- Require sample rate to be specified in config file and use it to read raw
32-bit .PCM filter files.
- Handles a different number of input and output channels (but only 32, 16
and 8-bit PCM and 32-bit IEEE Float -- the full set of usable formats will be
available in the next release)
- Try to handle different number of input and output channels (needs more
- TODO: reload plug-in if number of channels changed by new config file.
- Number of input and output channels need to be specified explicitly at the
start of the config file
- Better diagnostics (not fully tested)
- Recompiled FFTW
- Number of input and output channels deduced from config file
- Bugs corrected (eg, when filters changed)
- Display version information
- Small optimizations
- Added ZoomPlayer Pro DVDAutoGraph configuration file for Convolver Wrapper
- Use FFTW 3.0.1 instead of the Ooura DFT routines
- More testing and small optimizations
- Refactoring of CConvolution for speed and to make it easier to control from
- Config files accept file names with spaces in them
- code tidying
- First prototype of channel mixing version
- ConvolverWrapper merit set to MERIT_DO_NOT_USE+1
- Memory allocation bug introduced in 1.25 fixed
- 1.26i is an Intel C++ 9 build, which may be faster on some machines.
- Uses the (15%) faster version of the Ooura FFT routines
- ConvolverCMD scales by optimum attenuation
- Includes a DirectShow filter wrapper (ConvolverWrapper) so that convolver
can be run as a DirectShow filter.
- Compiled with VC++
- Integrates the libsndfile
library to read a wider variety of audio formats and remove dependencies on
Microsoft example code.
- Fix: 1.22 broke partitioned convolution.
- More Intel C++ optimizations.
- More optimizations. Compiled with Intel C++ 9.0 vectorization.
- Fixes: initialization of attenuation, upon first installation
- Code tidying
- Corrected calculation of optimum attenuation
- Some optimizations
- Added makeIR and perftest utilities. (See above for usage).
- Offers the option of using partitioned convolution, with reduced lag and
possible performance improvement
- Denormalize output. Optimum attenuation should now be more accurate for
- Use WAVEFORMATEXTENSIBLE, rather than WAVEFORMATEX to store filter format,
for better multi-channel support
- Source is normalized to -1..1, so that attenuation does not have to be adjusted
for different sources
- Now no need to "apply" after selecting a filter.
- Memcpy optimization
- Added a command line utility to convolve a WAV file with an Impluse Response
file (filter). Mainly for testing.
- Registers itself as a DMO, as well as a WMP DSP plug-in
- Now supports filters in 8, 16, 20, 24 or 32-bit PCM WAV file format
- Attenuation limits relaxed to ±1000dB.
- Added a (mainly unused) convolution routine for use when the sample buffer
size of a multiple of the filter size
- Reorganised source tree. Now also generates a DirectX Media Object (DMO)
for use as a DirectShow filter. The DMO registration process is still incomplete.
- Optimal attenuation calculated
- Further simplification of Cconvolution class parameters
- Float sources bug
- Report the format of the filter file on the Properties dialogue.
- Handle Extensible PCM and IEEE float Wave file format. The Extensible format
specifies both the bits per sample, the container size, (eg, 8, 16, 24, or 32
bits) and the valid bits per sample, the sample size,(eg, 20 bits). In
the original format, it is not clear whether bits per sample means the container
size or the sample size. The Extensible format also allows the mapping of channels
to spatial locations. See
Channel Audio Data and WAVE Files.
- Allow filters with a greater number of channels than the source to be applied
(using only the initial channels)
- Added cleaner internal debugging class from
- Removed redundant parameters to convolution class
- Regression of SampleBuffer class which probably needs to be rethought in
the C++ idiom, but vectors seem to run very slowly in Debug mode.
- Code tidying
- Attenuation sign correction
- Attenuation of source now possible.
- NB. The Debug build contains a good deal of code that is suitable for testing
only with perfect dirac delta filters (which should produce the same output
as input, delayed by the length of the filter). It will generate a lot of output
in the debug window otherwise, when run from Visual Studio 2003.
- (untested) support for 20, 24 and 32-bit PCM files.
- optimization settings on release build
- Guts rewritten to use C++ classes: polymorphism (so that different FFT base
types can be used (float is included); inheritance (so that it is easier to
handle new playback stream types (classes for 8 and 16-bit PCM, and 32-bit IEEE
float are included. 20, 24 and 32-bit are to do)). Now need to replace the stdio.h
routines such as sprintf with the new C++ string processing methods and optimize
(eg, the buffer manipulation routines.)
- More logic bugs removed
- Adds an untested deployment (setup) project
- Adds a utility to compare WAV files. This can be used to compare the Trace.wav
with what is being played back; if a perfect dirac delta filter is used, the
output should be the same as the input (other than for the initial samples).
- Corrects some basic bugs in the implementation of the DFT convolution algorithm
- Adds a utility for generating perfect dirac delta functions for use as test
- The debug version outputs what is being played back to
C:\temp\Trace.wav and AttenuationTrace.wav
to make it easier to test whether the algorithm is correct. It also produces
traces on the Visual Studio debug window.
This version actually does some convolving. It is pre-alpha quality and totally
unoptimized. It uses the overlap-save algorithm set out in
Figure 6 of Computational Improvements to Linear Convolution with Multirate Filtering
Methods by Jason R. VandeKieft. (and elsewhere). Uses Takuya Ooura's
General Purpose FFT (Fast
Fourier/Cosine/Sine Transform) Package.
The starting point for the convolver is
Microsoft's Echo Sample, which is an adaptation of the default audio DSP plug-in
generated by the Windows Media Player Plug-in Wizard.