I have the internals of a native convolution engine working.
Some points of interest:
- All processing is 64bit
- Any number of paths, targetting any input or output channel, is supported
- All FFT / iFFT evaluation is lazy so only run when necessary
- Filter files can be in any format supported by Media Center (.wav, .ape, .flac, .mp3, 16bit, 32bit, etc.)
- Partitioning is used to avoid latency (equal length partitioning for now, maybe unequal length someday)
- Latency is handled automatically so lip-sync for video works without additional user configuration
- Filters can be any sample rate (so one high sample rate, high precision filter can be used for all sources)
- Handles flushing nicely so the tail of the last song isn't heard when playing a new song
- Handles volume attenuation for clip protection automatically
.
Definitions:
I'm trying to use the same terminology as Convolver to minimize confusion.
- Path: a single convolution effect consisting of an input channel, filter, and output channel
- Filter: the correction / convolution used by a path, normally an impulse file
I still have to work out a user interface and reading of convolver text configuration files, so it might be a little while before we have anything to release.
WOW.
I am utterly grateful for your efforts! Count me in as lifetime JRiver supporter ;)
The list of features is great and well thought out. Features like auto volume attenuation, auto delay for lip sync, being inline with JRiver channel mapping and flushing between songs/skips are great benefits compared to ConvolverVST and really show the potential of a tightly integrated convolution. When I first started this thread I wasn't as forward thinking as you show it here - KUDOS! Amazing work!
The main attraction for me (a lover of big numbers ;-) is the full 64bit double precision processing. So this means we finally have a full 64bit audio path where it counts the most - with complex digital filtering. So if you allow 64bit WAV files (mono per channel + multichannel) as filter we can have:
content -> audio decoder (16bit/24bit/32bit for lossy formats) -> JRiver audio engine (64bit) -> JRiver Convolution (64bit) -> Output (dithering to 16bit/24bit/32bit depending on audio interface)
FIR filter generating (eg. Acourate in 64bit) -> export of filter impuls files (eg. 64bit WAV) -> ^
About different sampling rates: I understand that you are not resampling the content stream but the filter -> eg. 48khz content as input, loaded is a 96khz filter, you "resample" the filter file to 48khz before doing the convolution, right? Well, this is certainly a method to make it very easy for the user.
I used to do it the other way round - use a 96khz filter and resample any content to that sampling rate with JRiver. Your way certainly is much more elegant - not messing with the original stream.
Still I remain cautious. With Uli's Acourate I do one measurement (eg. in 48khz) and as final step of the process Acourate has the option to build filters at any given sampling rate - so basically Acourate is also resampling the filter before saving it. I am not sure if Acourate isn't doing a "better" job because it is "aware" of all the parameter involved (like Uli said, eg. brick wall filter influence - the problem is how to you deal with the band >20khz when you are up-/downsampling filters and how does this influence the filter (eg. introduce ringing)).
All DRC applications have the option to output filter at any given sampling rate. I would much prefer it (for the sake of piece of mind) that your Convolver allows automatic filter selection (like defining a workspace directory where the filter is loaded depending on the input stream sampling rate). Your idea idea about using one filter and resample it is certainly welcome and should also be an option.
While you are at it ;-) - A huge feature would be the option to define eg. 3 filter sets with on the fly switching between them. Successful DRC is an iterative try and error process - you build filter, you hear it with a variety of content and you compare it to filter with different parameter (like different target curves). Support for that process would be a huge benefit! This feature could also be used to assign different filter sets to different content. Like one with flat target curve for Stereo music content, and one with more bass emphasize for multichannel (movie) content.
I sent you test impulse filter by email.
THANK YOU VERY MUCH!