Hydrogenaudio Forums

Hosted Forums => foobar2000 => 3rd Party Plugins - (fb2k) => Topic started by: Garf on 20 June, 2003, 03:50:08 PM

Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 03:50:08 PM
Download for foobar2000 0.8.x (250K) (http://sjeng.org/ftp/fb2k/foo_convolve.zip)
Please see the official additional components (http://www.foobar2000.org/components/) page for the foobar2000 0.9.x compatible version.

This DSP component takes impulse response and does a
fast convolution of the sound data with that impulse
response.

Basically, it allows quick computation of any combination of
linear effects, such as equalization, echo, flange, reverb,
phase shift and so on. It can transform the sound to exactly
the image you would get as where the impulse response was
recorded, allowing you to get an accurate reproduction of
a big theather or stadium.

This effect is available as 'Acoustic Mirror' in Sound Forge.
A restricted version is available as 'Digital Convolution'
in Cool Edit.

A small manual is included in the readme.

Some discussion about convolutions:

http://www.hydrogenaudio.org/show.php/act/...t/ST/f/1/t/9116 (http://www.hydrogenaudio.org/show.php/act/ST/f/1/t/9116)

Edit: Added download instructions for foobar2000 0.9.x compatible version.
Title: foo_convolve - Impulse response convolver
Post by: xbenchman on 20 June, 2003, 04:08:36 PM
Thanks Garf,

Looks like a new toy to play with.
Title: foo_convolve - Impulse response convolver
Post by: Melomane on 20 June, 2003, 04:32:30 PM
ERROR (CORE) : Failed to load DLL: foo_convolve.dll, reason: Unable to load dll.

win98 se foobar 0.667
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 04:48:23 PM
Get libmmd.dll from rarewares. Does it solve things?

http://rarewares.hydrogenaudio.org/files/libmmd7.zip (http://rarewares.hydrogenaudio.org/files/libmmd7.zip)
Title: foo_convolve - Impulse response convolver
Post by: DigitalMan on 20 June, 2003, 04:58:55 PM
Garf,
Thanks for creating this - it could be extremely powerful.  libmmd.dll fixed this same error for me.

Question - what tools would you recommend for creating custom impulse responses, say for a room correction amplitude equalizer?  Could this be done with Sound Forge?
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 04:59:56 PM
I reuploaded it, the new version does not need libmmd.dll.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 05:06:59 PM
Quote
Question - what tools would you recommend for creating custom impulse responses, say for a room correction amplitude equalizer?  Could this be done with Sound Forge?

I have no experience with 'room correction amplitude equalization', but basically, if you find a single tool that can do it, and allows you to feed the impulse through it, you're set.

You can even use analogue equipment.
Title: foo_convolve - Impulse response convolver
Post by: DigitalMan on 20 June, 2003, 05:22:07 PM
Quote
Quote
Question - what tools would you recommend for creating custom impulse responses, say for a room correction amplitude equalizer?  Could this be done with Sound Forge?

I have no experience with 'room correction amplitude equalization', but basically, if you find a single tool that can do it, and allows you to feed the impulse through it, you're set.

You can even use analogue equipment.

Thanks, I think I can make this work for equalization.  By the way, any chance this plugin could be made to have the option for separate impulse responses for each channel?  I'm interested in equalization and that would help a lot.

Also, is it correct to assume that the impulse response must be created with the same sampling rate as the file to be convolved?  If not I would expect the time/frequency values would shift.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 05:30:21 PM
Quote
Thanks, I think I can make this work for equalization.  By the way, any chance this plugin could be made to have the option for separate impulse responses for each channel?  I'm interested in equalization and that would help a lot.


Way ahead of you  Just make stereo impulse responses.

Quote
Also, is it correct to assume that the impulse response must be created with the same sampling rate as the file to be convolved?  If not I would expect the time/frequency values would shift.


Correct.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 05:37:58 PM
Thanks to Case the example impulses are now in WavPack format (which foobar can read by default, you needed a plugin for the FLAC ones I had before).
Title: foo_convolve - Impulse response convolver
Post by: ExUser on 20 June, 2003, 07:36:22 PM
Quote
It can do an 2 048 tap equalization at 42 times realtime.
The default 18 tap foobar2k equalizer runs at 30 times
realtime. In effect, it can equalize faster than the
equalizer can.


How difficult is it to generate the tap data from the equalization parameters?
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 June, 2003, 07:45:17 PM
Quote
Quote
It can do an 2 048 tap equalization at 42 times realtime.
The default 18 tap foobar2k equalizer runs at 30 times
realtime. In effect, it can equalize faster than the
equalizer can.


How difficult is it to generate the tap data from the equalization parameters?

As explained in the readme, just feed an impulse through your effect of choice. In this case, diskwrite 'Unitimpulse2k.wav' with EQ settings of choice enabled.

If you want to, you can speed it up further by editing the resulting WAV with a sound editor and cutting the near silence before and after the impulse.
Title: foo_convolve - Impulse response convolver
Post by: ExUser on 21 June, 2003, 12:38:47 AM
Quote
As explained in the readme, just feed an impulse through your effect of choice. In this case, diskwrite 'Unitimpulse2k.wav' with EQ settings of choice enabled.

Ah, so it can't be done algorithmically?
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 June, 2003, 04:18:49 AM
Quote
Quote
As explained in the readme, just feed an impulse through your effect of choice. In this case, diskwrite 'Unitimpulse2k.wav' with EQ settings of choice enabled.

Ah, so it can't be done algorithmically?

How is this not 'algorithmically'???

You need to transform the frequency response of the EQ into an impulse response. Guess what diskwriting the impulse with EQ enabled does...

Edit: I guess that you're asking whether it's possible to make an EQ component that uses the foo_convolve engine as a backend for the equalizer. Yes. In fact I checked and there are similarities between the current backends, but my code is faster, and you can finetune the filter length. Not to mention it also works in stereo.
Title: foo_convolve - Impulse response convolver
Post by: ExUser on 21 June, 2003, 01:33:04 PM
Quote
How is this not 'algorithmically'???

You need to transform the frequency response of the EQ into an impulse response. Guess what diskwriting the impulse with EQ enabled does...

Edit: I guess that you're asking whether it's possible to make an EQ component that uses the foo_convolve engine as a backend for the equalizer. Yes. In fact I checked and there are similarities between the current backends, but my code is faster, and you can finetune the filter length. Not to mention it also works in stereo.

I mean directly calculating the tap data, rather than running a Dirac pulse through a system and finding its impulse response.

Ack. I think I need to start being more specific when I'm posting about technical stuff...
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 June, 2003, 01:38:57 PM
It's possible. I don't think it has much of a point though. The advantage of the convolver is that it's infinitely flexible and that you can combine the equalization with any other effect.
Title: foo_convolve - Impulse response convolver
Post by: lucpes on 21 June, 2003, 05:42:11 PM
I may have found a bug:

[speakers off!] download one of the files that are here: http://www.geocities.com/beamsonic/studio.htm (http://www.geocities.com/beamsonic/studio.htm),

Garf Edit: We killed the site. I uploaded files to http://sjeng.org/ftp/fb2k/analogue.zip (http://sjeng.org/ftp/fb2k/analogue.zip)

(I took the DBX 160 file) open in wave editor, keep only first 16384 samples, duplicate channel to get stereo, then save & set as impulse file in FB2k. Play something, then close FB2k. Open it and play the thing again, but now go into DSP properties to the convolver settings. You'll be granted with either a crash or a very loud distorted sound (kinda like microphone feedback).

edit: added speakers off warning...
Title: foo_convolve - Impulse response convolver
Post by: lucpes on 21 June, 2003, 06:01:57 PM
Problem "solved" by keeping the impulse sample as short as possible (trimming the impulse to get most of the 0's around it out).
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 June, 2003, 06:09:29 PM
It's a bug - the impulse doesn't get loaded when the config panel isn't opened. Will fix.

Edit: You don't need to convert to stereo - the component will convert automatically.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 June, 2003, 06:21:22 PM
Uploaded new version with bugfixes and speed improvements.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 21 June, 2003, 09:16:41 PM
Thanks for this truly essential tool, Garf.
Tiny req: I think that "dry/wet" slider would be nice for your tool.
Title: foo_convolve - Impulse response convolver
Post by: _Shorty on 21 June, 2003, 09:50:41 PM
you don't think this type of thing would/should be an all or nothing affair? Seems to me that your impulse response would be giving you exactly what you wanted and there wouldn't be any need for mixing it with the original.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 21 June, 2003, 10:53:58 PM
Quote
you don't think this type of thing would/should be an all or nothing affair? Seems to me that your impulse response would be giving you exactly what you wanted and there wouldn't be any need for mixing it with the original.

Well, yes, you're probably right.

I'm just used to wet/dry sliders in DSP effects  Especially in reverb, hrtf-related effects and similiar stuff. It's just an easy and fast way to adjust "amount" of effect you'd like at the moment. It's not "a must" for convolver, but that was first thing that I've been kinda "missing" while I was playing with IRs converted from SF Acoustic Mirror

Guess it could also be general request for DSP manager, but there are some plugins (like gap killers, crosfaders...) that couldn't utilize this functionality for any reasonable purpose... So, no.
Title: foo_convolve - Impulse response convolver
Post by: _Shorty on 22 June, 2003, 04:48:08 AM
I'm not strictly confident that a mix control would be useless in this case, it was just a thought, given how it operates.
Title: foo_convolve - Impulse response convolver
Post by: lucpes on 22 June, 2003, 05:28:31 AM
Quote
Uploaded new version with bugfixes and speed improvements.


Thanks!!! Now if I can borrow a tube preamp... it would be great... muhahaha  B)

edit: @Garf: can you include these in the analogue 'pack' (the pipeline preamps)?

http://www.noisevault.com/index.php?page=3.... (http://www.noisevault.com/index.php?page=3&action=category&cat_id=12&sid=302830928cf2eccdb95971ec8e748504)

BUG! [speakers off...] what happens if I load a 32bit float (IEEE) file as the impulse file? -> answer: blown tweeter fuses  dammit... I need to get new fuses
Title: foo_convolve - Impulse response convolver
Post by: Garf on 22 June, 2003, 09:18:40 AM
Updated

- Added auto level adjustment
- Added Wet/Dry mixer setting
- Fixed a few crashing bugs.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 22 June, 2003, 09:22:19 AM
Quote
BUG! [speakers off...] what happens if I load a 32bit float (IEEE) file as the impulse file? -> answer: blown tweeter fuses  dammit... I need to get new fuses

There is no reason that 32-bit float files won't work, except for that the component uses foobars readers for input files and 0.6x apparently has a bug in it's float readers.

Note that internally everything gets converted to 32 bit float anyway.

PS. noisevault.com is cool!
Title: foo_convolve - Impulse response convolver
Post by: Messer on 22 June, 2003, 11:27:06 AM
Quote
- Added Wet/Dry mixer setting

Thank you 
Title: foo_convolve - Impulse response convolver
Post by: DigitalMan on 22 June, 2003, 05:08:33 PM
Garf,
Can you add a cross channel feature?  This would allow us to make one channel a mix of convolution of left and right channels (like for "crossfeed" types of applications).  I guess we would need a stereo impulse response for each channel:

Left channel stereo impulse response:
Impulse response left channel: Left channel input to Left channel output
Impulse response right channel: Right channel input to Left channel output

Right channel stereo impulse response:
Impulse response left channel: Left channel input to Right channel output
Impulse response right channel: Right channel input to Right channel output

Then we might need a wet/dry mixer for the crossfeed channels too.

There is probably a more elegant solution to this, but I'm sure you get the idea.

Different subject:
Should the impulse response be dithered?  I thought dither should be used at the last stage before conversion to prevent error stackup.  The input signal to the convolver is not dithered, so why should the impulse response be?  If the impulse response is dithered should the output dithering be disabled?  I can see arguments both ways, wondering if there is a prevailing logic on this.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 22 June, 2003, 07:38:34 PM
Quote
Can you add a cross channel feature? 


I don't think this is worth the hassle at all, and I can't see many if any practical situations in which this would be useful.

You can crossmix after the convolver BTW. If there's a need for a crossmixer I'll make one.

Quote
The input signal to the convolver is not dithereds o why should the impulse response be? 


Don't forget that as far as the convolver is concerned it's 32 bits floats - dithering makes little difference there. You can give it dithered input as well, for example with a CD that was properly mastered.

I would recommend simple dithering but no noise shaping for the impulse signal.

Quote
If the impulse response is dithered should the output dithering be disabled? 


Keep output dithering enabled.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 23 June, 2003, 10:19:07 PM
Quote
- Added Wet/Dry mixer setting

There seems to be delay between original and processed signal, so wet/dry mixer does not work as it's supposed to. Try to load "dirac delta" impulse and play with the slider...
Title: foo_convolve - Impulse response convolver
Post by: Garf on 24 June, 2003, 09:31:06 AM
Yay, of course. I'll have to look whether this is fixable without significantly increasing memory consumption.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 24 June, 2003, 10:48:01 AM
I just checked, and it does seem to work correctly. Note that if the impulse you are using does not have the pulse at the very first sample in the file, you will have a delay filter and 'of course' wet/dry mixing may not give what you intend, but the plugin does work correctly!

With a true dirac pulse (at sample 0), the result is the same no matter what mixer setting is used, which is correct.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 24 June, 2003, 11:34:44 AM
D'oh! You're right.
Of course I tried it on included unitpulse2k.wav - hence the result
Title: foo_convolve - Impulse response convolver
Post by: Garf on 24 June, 2003, 11:46:16 AM
Yup...

It's padded out with silence because some effects cause changes/ringing before the actual pulse and I wanted to capture those so it's truely identical.
Title: foo_convolve - Impulse response convolver
Post by: ExUser on 24 June, 2003, 11:59:58 AM
Could you post this component on Jan's 3rd Party Plugins list so it'll get added to the site, or have you already looked into this?
Title: foo_convolve - Impulse response convolver
Post by: DickD on 24 June, 2003, 01:38:45 PM
Quote
Quote

Can you add a cross channel feature? 


I don't think this is worth the hassle at all, and I can't see many if any practical situations in which this would be useful.

You can crossmix after the convolver BTW. If there's a need for a crossmixer I'll make one.

Garf,

I'm not saying there's much need for crossmixing, but I do have an application. In a previous post (http://www.hydrogenaudio.org/forums/index.php?act=ST&f=1&t=6459) I suggested a simple stereo ambience effect (which allows adding stereo ambience to a mono recording as well as to mono) that could ideally be implemented with cross-channel convolution.

The special case (theta = 90° per pass) has two factors which I've tried rather laboriously with Cool Edit (Delay and Amplify/Crossmix/Invert features), but it does work rather nicely with just 4 passes:

1. Delay between passes (e.g. 1152 samples at 44.1 kHz = 26.112 ms)
2. Attenuation Coefficient per pass (e.g. -18 dB)

Assume you have L and R original sample values, you end up adding a delayed and attenuated version with channels swapped and one inverted to the input signal.

You can then pass this delayed signal through the same transformation/attenuation and add that too. (By this stage it's -L and -R but delayed and attenuated)

As an example, if you have a delta function on the left channel only, delay by 1152 and attenuate by 6dB per pass (rather "wet" sounding), the output pulse switches channel with each pass of the delay and inverts when going from right to left:

L(0) = 1.0000

R(1152) = 0.5000

L(2304) = -0.2500

R(3456) = -0.1250

L(4608) = 0.0625

My previous post showed this on an argand diagram (complex number) representation, including options to use non-90° steps per pass, which could also be represented using separate left and right convolution functions.

That defines the left channel's stereo convolution function for 4 passes (in practice -18 dB is a subtler, less wet effect, and sounds rather natural). I must get round to posting some samples.

The right channel's stereo convolution function for 4 passes of -6 dB per pass, 1152 samples delay per pass would be:

R(0) = 1.0000

L(1152) = -0.5000

R(2304) = -0.2500

L(3456) = 0.1250

R(4608) = 0.0625

When used subtly, the effect is a rather polished sheen and space around recordings that can be quiet pleasant when used sparingly yet doesn't colour the sound's frequency response like some measured room effects or comb-filter stereo effects.

Compared to the Cool Edit approach I've used a couple of times now, I could actually save some steps in achieving this effect by generating the same-channel file with one convolution using your foo_convolve as it stands, then mix-pasting with a file created by convolving a cross-mixed version with a different convolution function (and auto gain off).

Further applications of crossmixed FIR convolution include playback of binaural material over loudspeakers (probably requires rather exact listener location, so probably not very useful) and probably some kinds of cancellation of room-interaction with loudspeakers (you need to generate the inverse convolution function to cancel out the effects). I suspect the frequency-flattening part of the latter doesn't need cross-mix, and cross mix might not add much value to it.

By the way, Garf, I note in the Readme.txt that you wrote it 18000 years in the future:
Quote
Copyright © 20003 Gian-Carlo Pascutto


Just thought I'd point it out. 

DickD
Title: foo_convolve - Impulse response convolver
Post by: Garf on 24 June, 2003, 02:05:50 PM
Okay, two thoughts:

1) Maybe it would be better to make a seperate plugin for this.

2) I could make crossmix impulses optional. I think they are bloat, but it is nice functionality and it's probably possible to implement them without slowing down/increasing memory usage if they aren't used. I have time now to work on this kind of thing.

Quote
Further applications of crossmixed FIR convolution include playback of binaural material over loudspeakers (probably requires rather exact listener location, so probably not very useful)


I don't know how this works

Quote
and probably some kinds of cancellation of room-interaction with loudspeakers (you need to generate the inverse convolution function to cancel out the effects).


Inverse convolution is tricky - you can't even mathematically guarantee it works, and in practise you often end up with a lot of noise. If I got it correct, this is no more than changing a multiplication by a division in my code, so it wouldn't be very hard to try. I actually already did once but was very unimpressed by the result.

Quote
By the way, Garf, I note in the Readme.txt that you wrote it 18000 years in the future:
Quote
Copyright © 20003 Gian-Carlo Pascutto


Just thought I'd point it out. 


YOU BLEW MY COVER!!1
Title: foo_convolve - Impulse response convolver
Post by: DickD on 25 June, 2003, 07:56:56 AM
Sorry for blowing your cover - those time cops will be after you!

BTW, can I ask why you do an FFT in your plugin? Is it simply to measure the approximate effective scaling of the impulse response and automatically adjust the gain?

I agree that cross-mixing is bloat for most purposes (e.g. simple equalization), though it provides better representation of reflections for room simulation (particularly binaural room simulation for headphones).

The other application of cross-mixing convolution I forgot to mention is for speaker simulation on headphones. If you like the sound of your home HiFi setup in its sweet spot, you could record its impulse response on each channel in stereo using, for example, binaural headphones (like those on Jim Bamford's Binaural Field Recordings site (http://jimtreats.crosswinds.net/MyTreats/Binaural/index.htm)). By crossmix-convolving that with your music, you could, for example use FB2K and foo_clienc to output MP3 or MP2 files to play on a portable with earphones that sound just like your favourite system (apart from any non-linear effects). Without crossmixing impulse responses, you don't get the crossfeed effect.

I know most people don't have binaural microphones or dummy heads to do this measurement (or the deconvolution to create a binaural effect over loudspeakers) but a few people with the right equipment could create impulse responses for a variety of pleasant-sounding loudspeaker set-ups to act as loudspeaker simulation for headphones that could be even more natural (and doubtless more coloured!) than many crossfeed plugins.

A few links relating to this are included on:
http://www.geocities.com/kangimp/ (http://www.geocities.com/kangimp/)

One worth looking for is Angelo Farina and his Aurora and Ramsete software. You may need to use Google or www.archive.org to download the cached versions of pages, because I'm having trouble reading them direct. This package includes some methods regarding the calculation of inverse impulse responses (i.e. for deconvolution of linear effects) and he also has numerous scientific papers on these matters. There are various methods suggested which have different qualiteis.

Getting a bit technical, division works perfectly in the Fourier domain to deconvolve in the time domain (albeit that highly attenuated frequencies when amplified back to the original level tend to be very noisy - it's division by a small number represented in a fixed-point scale). The same happens in image deblurring with 2D Fourier Transforms, where high spatial frequencies tend to become noisy in the sharpened image.

However, simply dividing by the convolution function in the time domain doesn't do the same thing. I think that's equivalent to convolution in the frequency domain (or perhaps convolution by the complex-conjugate - my memory is a bit fuzzy). I can't imagine it sounding pretty, especially with all those divide-by-zeroes!

where * represents convolution and x is multiplication:
m(t) = g(t) * h(t)
M(f) = G(f) x H(f)

If you want to recover the original signal, g(t) (which can be represented by its full Fourier Transform, G(f)) which is the sound before it was convolved by the impulse response of your system and listening room, you can take the Fourier Transform of the output, M(f) and divide it by the F.T. of the impulse response, H(f) to obtain G(f). This is the same as multiplying it by 1/H(f). If so we have:

G(f) = M(f) x (1/H(f))
so we can also say
g(t) = m(t) * inverseFFT(1/H(f))

So if you know h(t), you can derive the deconvolution function by taking its Fourier Transform, H(f), inverting it (watch out for divide-by-zero!) and taking the inverse Fourier Transform of that. You might find that this contains some complex components (I haven't thought it through to work that out), and near-infinite components (divide by zero for frequencies that were fully attenuated in the original).

For example, your DAC should contain a brickwall filter to remove frequencies between about 20 and 22.05 kHz, which the pure deconvolution function would try to correct for, leading to masses of HF noise (because of the near-zero functions). It's not desirable or pracitcal to overcome this filter, so I'd modify the deconvolution filter to act only on audible frequencies, up to around 20 kHz while not attempting to boost frequencies too near the Nyquist. This could be done in the Fourier domain, e.g. by setting zeroes instead of calculating 1/H(f) for frequency bins above +20 kHz (and those below -20 kHz in negative frequency) or it could be done by post-filtering the deconvolution function with a suitable low-pass.

There are a number of technical difficulties in these sorts of techniques and various solutions.

Impulses, being very brief, are rather low energy, and this energy is spread by the true impulse response so that the measured response is prone to being noisy (causing problems with accurate deconvolution). One method of improving the signal-to-noise ratio is to average many many impulse responses and reduce the measurement error of the average.

For simple frequency equalization, tone sweeps (chirps) can work and can contain more energy per frequency than a single Dirac delta function pulse.

From a prior life when I was heavily into research about clipped digital correlation or noisy analogue signals, I also remember techniques like chirp-Z are possible for some similar analysis (equivalent to correlation) and might be adaptable.

One nice technique, also used in radar and time-domain reflectometry, is the use of pseudorandom noise, which has a white spectrum, just like a delta function, but much higher average energy. You can either cross-correlate the received signal with the known pseudrandom input signal and determine the time signature or you can take the Fourier transform of the correlation function to determine the power spectrum. I suspect a similar technique could be adapted to deriving impulse responses and inverse convolution functions from relatively noisy measurements. A correlation function is closely related to an impulse response. Similar ideas are used in spread-spectrum communications techniques like Code Division Multiple Access (CDMA).
Title: foo_convolve - Impulse response convolver
Post by: Garf on 25 June, 2003, 09:06:50 AM
Quote
BTW, can I ask why you do an FFT in your plugin? Is it simply to measure the approximate effective scaling of the impulse response and automatically adjust the gain?


The convolution works entirely in the frequency domain. It already does what you describe halfway.

Quote
Getting a bit technical, division works perfectly in the Fourier domain to deconvolve in the time domain (albeit that highly attenuated frequencies when amplified back to the original level tend to be very noisy - it's division by a small number represented in a fixed-point scale).


This is what I tried. I made several restrictions, one that it was restricted to zero phase filters (no complex components), and that any boost was forcedly limited to 30dB (to prevent overamplification of noise). But even reversing simple equalization didn't work all that well. It needs further experimentation.

But I will try crossmix convolution first.
Title: foo_convolve - Impulse response convolver
Post by: KikeG on 25 June, 2003, 09:18:12 AM
Quote
For simple frequency equalization, tone sweeps (chirps) can work and can contain more energy per frequency than a single Dirac delta function pulse.

From a prior life when I was heavily into research about clipped digital correlation or noisy analogue signals, I also remember techniques like chirp-Z are possible for some similar analysis (equivalent to correlation) and might be adaptable.

One nice technique, also used in radar and time-domain reflectometry, is the use of pseudorandom noise, which has a white spectrum, just like a delta function, but much higher average energy. You can either cross-correlate the received signal with the known pseudrandom input signal and determine the time signature or you can take the Fourier transform of the correlation function to determine the power spectrum. I suspect a similar technique could be adapted to deriving impulse responses and inverse convolution functions from relatively noisy measurements. A correlation function is closely related to an impulse response. Similar ideas are used in spread-spectrum communications techniques like Code Division Multiple Access (CDMA).

In audio, MLS and IRS signals are used to derive (deconvolve) the impulse response, in a similar way to the ones you suggest. They are available too at Angelo Farina's Aurora set of plugins.
Title: foo_convolve - Impulse response convolver
Post by: DickD on 25 June, 2003, 10:38:17 AM
Quote
The convolution works entirely in the frequency domain. It already does what you describe halfway.

...

This is what I tried. I made several restrictions, one that it was restricted to zero phase filters (no complex components), and that any boost was forcedly limited to 30dB (to prevent overamplification of noise). But even reversing simple equalization didn't work all that well. It needs further experimentation.

But I will try crossmix convolution first.

Ah, seeing that you use FFTs to actually perform the convolution, they're bound to be windowed FFTs - presumably using lapping transform windows? The mathematics about convolution in time being equivalent to multiplication in frequency domain may well break down somewhat for windowed/blocked FFTs. Also, you need to ensure that you divide one complex number by the other for it to remain true. I think if you dump the complex parts, you always obtain a symmettrical ("even") time-domain signal from the inverse FT, comprised entirely of cosine components (cosine is an even function, sine is odd (mirror image about zero), and various other exp(ix + theta) functions, where theta isn't a multiple of pi/2 are neither odd nor even).

I'm guessing that zero-phase (cosine) filters might end up beating with non-zero-phase filters in the original impulse response that you EQ'd? Just a suggestion. You wrote (or at least modified) the latest equalizer plugin, so you know how that works internally better than I do.

@KikeG: Thanks for the MLS / IRS thing for deconvolution. I found on Google a link to the Aurora site describing this, and a thread where you told me this before, so apologies for making you repeat it!
Title: foo_convolve - Impulse response convolver
Post by: Garf on 25 June, 2003, 11:21:18 AM
Quote
Ah, seeing that you use FFTs to actually perform the convolution, they're bound to be windowed FFTs - presumably
using lapping transform windows? The mathematics about convolution in time being equivalent to multiplication in frequency domain may well break down somewhat for windowed/blocked FFTs.


Given that the overlapping is done properly, it doesn't. I started with a FIR convolver and optimized it.

Quote
I'm guessing that zero-phase (cosine) filters might end up beating with non-zero-phase filters in the original impulse response that you EQ'd?


I think foobars equalizer is zero-phase also, but I'm not sure. (I was inverting the original equalizer).
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 25 June, 2003, 01:01:01 PM
Brilliant plugin!

I was wondering if you might consider adding a pre delay slider eg:- from -500 to +500 ms.
This would be great for old tape delay impulses as well as offset problems with badly trimmed impulses.

Thanks again, keep up the good work.

P.S.
Check out:-
http://sound.media.mit.edu/KEMAR.html (http://sound.media.mit.edu/KEMAR.html)

For impluses of 3d spacial positioning based upon how the human ear hears.  Useful for sound design (especially for film).
Title: foo_convolve - Impulse response convolver
Post by: Garf on 25 June, 2003, 01:40:37 PM
For regulating delay edit the impulse. It makes no sense whatsoever to make this configurable in the plugin.
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 27 June, 2003, 02:42:15 PM
All professional digital reverbs have pre-delay sliders/knobs.  This is also true of convolution units.  Pre-delay can make a room sound "larger".
Title: foo_convolve - Impulse response convolver
Post by: Garf on 27 June, 2003, 03:14:24 PM
I don't care what design mistakes other people made. You can do it by editing the impulse. There is no point to including it in the component.
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 28 June, 2003, 10:09:25 AM
Lexicon, TC, & Waves units do not use impulses to achieve reverb, yet these companies include pre-delay in all their reverb units as it is considered essential.

It seems, however, you have already made up your mind though.  I was just hoping you could make this great plugin perfect, thats all.

Thanks again for your plugin.
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 28 June, 2003, 10:38:56 AM
Another interesting proposition, possibly required for certain types of effects... mid/side impulses.

Positive pulse similar to unitpulse2k.wav passed through effect -> mid impulse.
Positive pulse in one channel with negative pulse in opposite channel passed through effect -> side impulse.

Output = Mid calculated from stereo input -> mid impulse
Output += Side calculated from stereo input -> side impulse

Probably only useful for stealing stereo expansion effects from closed source or closed license software signal filters.
Title: foo_convolve - Impulse response convolver
Post by: ExUser on 29 June, 2003, 03:00:02 PM
Quote
Lexicon, TC, & Waves units do not use impulses to achieve reverb, yet these companies include pre-delay in all their reverb units as it is considered essential.

It seems, however, you have already made up your mind though.  I was just hoping you could make this great plugin perfect, thats all.

Thanks again for your plugin.

What Garf is saying is that the convolver _SUPPORTS_ pre-delay. It is achieved by simply editing the impulse. There are a thousand and one different ways to permute the impulse before it is used, and the most efficient way to support them all is to make the end-user apply them before the plug-in deals with the impulse.

Furthermore, reverb is impossible without impulses. Reverb itself is just a specialized case of a convolution filter. Even if your DSP takes the input audio, delays it 50ms, then mixes it back into the music at half-volume or something, that is just a hard-coded convolution filter. I know that's a little pedantic, but it is the truth.

Perhaps it is exactly because they do not use a traditional convolution filter for their reverb that they feel it necessary to include a pre-delay function. Are there any reverberators out there that use convolution but still do the pre-delay thing?
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 30 June, 2003, 04:17:32 AM
Correction for previous request, I have no idea how the hell this would work, if at all.

Of course, I can see the relevance of summing stereo impulses of individual channels, perhaps for processing each channel with its own HRTF impulse. Of course, that'd be doubly slow for plain stereo... double again for 4.0...
Title: foo_convolve - Impulse response convolver
Post by: paradynamic on 08 July, 2003, 07:25:01 PM
How does one go about converting Sound Forge impulse files (.sfi) to .wav format for loading in FB2K?
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 08 July, 2003, 09:41:32 PM
Feed that unitpulse2k.wav through it. You can trim it down to the single pulse sample first, as the output will be extended to the full length of the impulse.
Title: foo_convolve - Impulse response convolver
Post by: Melomane on 19 July, 2003, 09:29:37 AM
MIX ADJUST not work fine here.

Load impulse file, for exemple unitpulse2k
(because problem is very clear)

put slider to 0 %
play
sound isn't different from sound without convolver (fortunately...).

put slider to 100 %
sound no change (logically!)

put slider to 50 %
I can not explain in English what I hears but it is catastrophic!

same problem with all impulses files
foobar 0.667 and 0.7 b22

please, can you confirme if it is a bug or if i have a problem in my system?
Title: foo_convolve - Impulse response convolver
Post by: Messer on 19 July, 2003, 10:20:39 AM
Melomane, read whole thread - I had the same "problem". Unitpulse is not really unitpulse (Dirac delta) but unitpulse plus const., so it works as delay filter.
Title: foo_convolve - Impulse response convolver
Post by: Melomane on 19 July, 2003, 10:53:54 AM
Thank you Messer, now i understand.
i have use file from convolve.zip (0.6 foobar) and all are wrong.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 19 July, 2003, 11:13:33 AM
Quote
I don't care what design mistakes other people made. You can do it by editing the impulse. There is no point to including it in the component.

Garf, just wondering...
If the impulse contains response that comes _before_ actual pulse (some pre-echoes etc.), then there's no way to compensate delay by editing impulse file only...
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 19 July, 2003, 08:05:24 PM
There is also no way to compensate for that on output, unless you want to cut off the pre-echo of the first few samples.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 20 July, 2003, 09:26:01 AM
kode54 is correct. It's also reason why the included unitpulse2k is not a true dirac pulse, so effects that influence before the impulse have some 'room'. I noticed that otherwhise most effects aren't able to work well.

If you have an effect with delay and want to have a delayed wet/dry mix, work with the impulse in an external wave editor.
Title: foo_convolve - Impulse response convolver
Post by: Messer on 20 July, 2003, 10:20:27 AM
Nah, that's not really a whining, I was just "thinking aloud" about possible situations where adjustable delay could be handy  Not that it's worth the hassle...
Title: foo_convolve - Impulse response convolver
Post by: tigre on 01 December, 2003, 03:20:05 AM
Garf, in case you need some more whining as motivation

Could you please, pretty please, look into adding crossmixing?
Title: foo_convolve - Impulse response convolver
Post by: WaldoMonster on 28 December, 2003, 06:23:21 PM
Where can I download the latest foo_convolve plugin?
Title: foo_convolve - Impulse response convolver
Post by: tigre on 28 December, 2003, 07:24:40 PM
Quote
Where can I download the latest foo_convolve plugin?

It's included in the special installer from Case's site (http://ttp://www.saunalahti.fi/cse/html/foobar.html) or available at official fb2k components site (http://www.foobar2000.org/components.html).
Title: foo_convolve - Impulse response convolver
Post by: WaldoMonster on 29 December, 2003, 04:45:39 AM
Quote
Quote
Where can I download the latest foo_convolve plugin?

It's included in the special installer from Case's site (http://ttp://www.saunalahti.fi/cse/html/foobar.html) or available at official fb2k components site (http://www.foobar2000.org/components.html).

Thanks for the links.
I couldn’t find it on http://fb2k-plugins.hydrogenaudio.org/ (http://fb2k-plugins.hydrogenaudio.org/)
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 18 January, 2004, 07:51:46 AM
I was wondering the processing pipeline of FooConvolver?

Is it:-

Impulse converts to 64 bit float and then is processed with what is in the playlist (which is also converted to 64 bit float).

ie:- 64 bit float x 64 bit float regardless of format the originals were in.

all processed using 64 bit float precision?

Also what happens when the samplerates do not match?
Title: foo_convolve - Impulse response convolver
Post by: Garf on 18 January, 2004, 09:41:50 AM
Quote
Impulse converts to 64 bit float and then is processed with what is in the playlist (which is also converted to 64 bit float).

ie:- 64 bit float x 64 bit float regardless of format the originals were in.

all processed using 64 bit float precision?

Also what happens when the samplerates do not match?

All processing is in 32 bit float precision. (There is no quality advantage in 64 bits and it takes up more memory).

When samplerates don't match the samplerate of the output takes priority, and the impulse is treated as having that samplerate (so basically you want to avoid that unless you want to try to get some funny effects).
Title: foo_convolve - Impulse response convolver
Post by: kelesh on 30 January, 2004, 05:46:34 AM
So does anybody have a good impulse for use with Sennheiser HD580's, an audigy 2 using kernel streaming, and pop/rock music?  (weezer, red hot chili peppers, beck, cake, radiohead, etc)  (and some classical/techno of course).
Title: foo_convolve - Impulse response convolver
Post by: Messer on 30 January, 2004, 06:00:30 AM
Quote
So does anybody have a good impulse for use with Sennheiser HD580's, an audigy 2 using kernel streaming, and pop/rock music?  (weezer, red hot chili peppers, beck, cake, radiohead, etc)  (and some classical/techno of course).

Try UnitpulseDirac.wav.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 30 January, 2004, 09:17:45 AM
Quote
Quote
So does anybody have a good impulse for use with Sennheiser HD580's, an audigy 2 using kernel streaming, and pop/rock music?  (weezer, red hot chili peppers, beck, cake, radiohead, etc)  (and some classical/techno of course).

Try UnitpulseDirac.wav.

Ahaha, touche!

The HD580 is great without equalization or impulses but sometimes the perfect lineariry does get boring. In those cases I kinda like "Tube Amps/Studer +6dB Updated" for a warmer feeling.
Title: foo_convolve - Impulse response convolver
Post by: Mhenckel on 02 February, 2004, 03:04:30 AM
Quote
This is what I tried. I made several restrictions, one that it was restricted to zero phase filters (no complex components), and that any boost was forcedly limited to 30dB (to prevent overamplification of noise). But even reversing simple equalization didn't work all that well. It needs further experimentation.

You need at more sophisticated approach for this.

Try DRC program by Dennis SAbrigion. It can be found at Freashmeat

Morten
Title: foo_convolve - Impulse response convolver
Post by: Pio2001 on 24 April, 2004, 09:30:59 AM
Is it possible to add support for one impulse response per sample rate ?

I use an impulse response in order to correct the equalization of my speakers, because the equalizer don't have a parametric section. But I have both 44100 Hz and 48000 Hz files in my playlist.

It would be nice if the convolver would use toto44.wav as impulse response when a 44.1 kHz file is played, and switch to toto48.wav when a 48kHz file is played.
Title: foo_convolve - Impulse response convolver
Post by: Paranoia on 24 April, 2004, 12:31:33 PM
Exhibited *very* strange behaviour.

Upon first run with it, attempted to go into prefs, and it foobar crashed as soon as I click "foobar2000".

Removed *all* componets, and it worked fine. So i slowly added them all back in, and now it works fine. lol. *shrugs*

Steve
Title: foo_convolve - Impulse response convolver
Post by: Garf on 29 July, 2004, 01:45:45 PM
Quote
Is it possible to add support for one impulse response per sample rate ?

I use an impulse response in order to correct the equalization of my speakers, because the equalizer don't have a parametric section. But I have both 44100 Hz and 48000 Hz files in my playlist.

It would be nice if the convolver would use toto44.wav as impulse response when a 44.1 kHz file is played, and switch to toto48.wav when a 48kHz file is played.
[a href="index.php?act=findpost&pid=205850"][{POST_SNAPBACK}][/a]


Shouldn't correct and easier behaviour be to resample the impulse response instead?
Title: foo_convolve - Impulse response convolver
Post by: Pio2001 on 30 July, 2004, 10:32:07 PM
I don't know.
If you know as a fact that it works (=produce the desired effect) it would be the easiest solution by far, yes, though some people might prefer having the freedom to choose their own resampler, or to record the impulse again.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 31 July, 2004, 07:09:54 AM
Quote
though some people might prefer having the freedom to choose their own resampler


That will be true to some extent, since I'd just use foobar's resampler services.
Title: foo_convolve - Impulse response convolver
Post by: Wizard on 07 November, 2004, 06:52:12 AM
After reading about foo_convolve, I decided to use it to emulate the Winamp built-in MP3 equalizer. The problem is that the impulses are wav files. I'm not good with theory, I mean can I convert the wav impulse to mp3 and feed it through Winamp? If this is not possible, do I have any other option?
Title: foo_convolve - Impulse response convolver
Post by: Garf on 07 November, 2004, 07:52:47 AM
Just feed the wav through winamp??
Title: foo_convolve - Impulse response convolver
Post by: upNorth on 07 November, 2004, 08:14:51 AM
I think Wizard is suggesting that Winamp has a format specific equalizer, that is triggered only when playing that particular format. Hence a wav file won't work if you want to capture the settings used with mp3 files.

I don't have a clue whether it works this way though...
Title: foo_convolve - Impulse response convolver
Post by: Wizard on 07 November, 2004, 08:21:09 AM
Quote
I think Wizard is suggesting that Winamp has a format specific equalizer, that is triggered only when playing that particular format. Hence a wav file won't work if you want to capture the settings used with mp3 files.

I don't have a clue whether it works this way though...
[a href="index.php?act=findpost&pid=252464"][{POST_SNAPBACK}][/a]


Exactly upNorth! Winamp's in_mp3 has an option "Fast Layer 3 EQ", which is only for MP3 playback and I have a certain preset that I'd like to emulate.
Title: foo_convolve - Impulse response convolver
Post by: wimms on 01 December, 2004, 10:07:06 AM
Hi,

Garf, you planned to add cross-channel convolution, have you dropped the idea?
Please, if at all possible, that would be very very good thing.

All those crossfeed plugins are too limited. 2 stage convolution would be ideal to reach any desirable result.

(https://hydrogenaud.io/imgcache.php?id=38d49ee0129b20aecb0479b5c916c5f5" rel="cached" data-warn="External image, click to view at original size" data-url="http://headwize.com/images/hdrm3.gif)
To make decent headphone listening with convolve plugin, you'd need to convolve as you crossmix.

Using crossfeed plugin after convolve does not do it right. You really need to manipulate crossfeed data in both time and frequency response.

http://headwize.com/tech/headrm1_tech.htm (http://headwize.com/tech/headrm1_tech.htm)
Title: foo_convolve - Impulse response convolver
Post by: Xenion on 08 January, 2006, 04:36:03 PM
will there pleeease be a 0.9 version when it's final ?
Title: foo_convolve - Impulse response convolver
Post by: CSMR on 21 January, 2006, 11:38:15 AM
Could Garf or someone else tell me what the functionalities of this convolver are?

Am I right that if you have a stereo signal it expects a stereo convolution and convolves each channel of the original signal with the corresponding channel of the convolution file?

If you had an n channel original and an n channel convolution would that work too?

Presumably in general convolution will take an n channel original and convolve it with an n*m matrix of mono signals to get an m channel result. This convolver doesn't do that I don't suppose?

And are all sample rates supported as long as the original has the same rate as the convolution?

Thanks for any help.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 January, 2006, 01:12:39 PM
Quote
will there pleeease be a 0.9 version when it's final ?
[a href="index.php?act=findpost&pid=355570"][{POST_SNAPBACK}][/a]


I gave Peter the source code so all new versions should include it by default.
Title: foo_convolve - Impulse response convolver
Post by: CSMR on 26 January, 2006, 12:34:36 AM
Bump. If this convolver just convolves with a single mono convolution is any convolver more flexible, for foobar or any other playback software?
Title: foo_convolve - Impulse response convolver
Post by: CSMR on 01 February, 2006, 03:56:21 AM
Bump
Title: foo_convolve - Impulse response convolver
Post by: graham_mitchell on 15 March, 2006, 04:16:32 PM
Quote
Bump. If this convolver just convolves with a single mono convolution is any convolver more flexible, for foobar or any other playback software?
[a href="index.php?act=findpost&pid=359829"][{POST_SNAPBACK}][/a]


Is it still in mono? Would be useful to have it in stereo, due to room asymmetry. Seems like a small change (?)
Title: foo_convolve - Impulse response convolver
Post by: kadajawi on 18 March, 2006, 10:08:35 AM
Quote
Quote
Bump. If this convolver just convolves with a single mono convolution is any convolver more flexible, for foobar or any other playback software?
[a href="index.php?act=findpost&pid=359829"][{POST_SNAPBACK}][/a]


Is it still in mono? Would be useful to have it in stereo, due to room asymmetry. Seems like a small change (?)
[a href="index.php?act=findpost&pid=371784"][{POST_SNAPBACK}][/a]

And what about foobar2000 0.9 support? Because as of now foobar would be as useless as amaroK, which would be better since its a good native Linux player... but I need convolution, and the probably only way to get that is through the insanely difficult BruteFIR... tried many days, couldn't get it working... (though I'm making progress...).
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 19 March, 2006, 09:55:55 AM
I was wondering if convolver in 0.9 will support 5.1 or more channels in the impulse file.
Title: foo_convolve - Impulse response convolver
Post by: tacitus10 on 21 March, 2006, 10:53:18 PM
Any news on 0.9 convolver?
Title: foo_convolve - Impulse response convolver
Post by: skyhopper88 on 20 April, 2006, 04:20:22 PM
This is the last thing I need to feel at home with 0.9. Any new news?
Title: foo_convolve - Impulse response convolver
Post by: Xenion on 20 April, 2006, 04:24:02 PM
same here
also waiting
Title: foo_convolve - Impulse response convolver
Post by: Wedge on 23 April, 2006, 06:58:11 AM
i'm also missing the 0.9 convolver. any plans on updating it?
Title: foo_convolve - Impulse response convolver
Post by: kaiwei on 25 April, 2006, 12:14:31 PM
I would go down on my knees if I have to.

Please, please release a 0.9 ver!
Title: foo_convolve - Impulse response convolver
Post by: askoff on 25 April, 2006, 01:38:25 PM
I've been waiting this plugin also and I need it almost desperately.
Title: foo_convolve - Impulse response convolver
Post by: tintin814 on 29 April, 2006, 02:41:23 AM
is there ant plan for the development to support foobar2000 0.9?
I miss this plugin so much
Title: foo_convolve - Impulse response convolver
Post by: deandob on 06 May, 2006, 06:41:01 PM
The convolver is not part of the standard foobar install.

Is there any chance that the author for foo_convolve could re-compile it for v0.9 foobar?

Thanks!
Title: foo_convolve - Impulse response convolver
Post by: Wedge on 07 May, 2006, 04:07:22 PM
it's available now @ http://www.foobar2000.org/components/index.html (http://www.foobar2000.org/components/index.html)
Title: foo_convolve - Impulse response convolver
Post by: saivert on 30 July, 2006, 01:36:48 AM
Regarding the way Equalization works in Winamp
Winamp's input API allows for Equalizer handling in the input plugin, but you have to go way back to find a Winamp that required the input plugin to Equalize the audio. Most Winamp versions has it's own integrated Equalizer that sits between the DSP and output stages. Nullsoft even improved this Equalizer with new code a while back.
Title: foo_convolve - Impulse response convolver
Post by: foosion on 30 July, 2006, 05:07:41 AM
Regarding the way Equalization works in Winamp
...
How is this relevant to the discussion? I hope you realize that the last mention of equalization in Winamp is from December 2004.
Title: foo_convolve - Impulse response convolver
Post by: saivert on 13 August, 2006, 05:50:47 PM
I hope you realize that the last mention of equalization in Winamp is from December 2004.


I did not look at the post date sorry. I will start to look at the post dates from now on.
But why are there so old posts still around here? Time to prune the forum database perhaps?

Clean everything from before 2005 and maybe put really important info in a Wiki.
Wikis are for archival of information while forums are for discussions of up to date topics.

Thank you!

Now I wonder how to learn how to make Impulse response files from scratch using Adobe Audition.
Title: foo_convolve - Impulse response convolver
Post by: askoff on 14 August, 2006, 02:44:48 AM
Now I wonder how to learn how to make Impulse response files from scratch using Adobe Audition.

That should be easy. Make a new mono wave file and add for example 8192 samples silence. Put one sample as high as possible somwhere in middle. I suggest you to edit mono file at this stage, because if the impulse differs between channels, I think it can result small delay and/or gain difference between channels. Now you should have impulse responce which doesn't do any "efects". Now you can apply some efects with Adobe Audition to it. Just duplicate the mono file to stereo afterwards. Impulse responce should be at same sampling rate as the audio where it is applied.
Title: foo_convolve - Impulse response convolver
Post by: david_dl on 14 August, 2006, 04:33:52 AM

I hope you realize that the last mention of equalization in Winamp is from December 2004.


I did not look at the post date sorry. I will start to look at the post dates from now on.
But why are there so old posts still around here? Time to prune the forum database perhaps?

Clean everything from before 2005 and maybe put really important info in a Wiki.
Wikis are for archival of information while forums are for discussions of up to date topics.

Thank you!


Old stuff is still very useful, old threads move to the bottom of forums so the ones noone is ever going to reply to annoy noone, and if someone wants to resume discussion of an old topic, perhaps something to do with recent developments, they can do so without having to repeat everything that has already been said.
Title: foo_convolve - Impulse response convolver
Post by: Hancoque on 25 April, 2007, 02:55:02 PM
I'm not quite sure how to correctly use the convolver plugin. In my case I would like to use it as an alternative to Dolby Headphone. I have an impulse file from a rehearsal room, but I assume that it isn't enough to only use the convolver plugin, because the stereo field still seems to be unnaturally wide. Would a simple crossfeed plugin, that's put before the convolver plugin, be the best solution here?
Title: foo_convolve - Impulse response convolver
Post by: askoff on 29 April, 2007, 06:00:37 PM
I'm not quite sure how to correctly use the convolver plugin. In my case I would like to use it as an alternative to Dolby Headphone. I have an impulse file from a rehearsal room, but I assume that it isn't enough to only use the convolver plugin, because the stereo field still seems to be unnaturally wide. Would a simple crossfeed plugin, that's put before the convolver plugin, be the best solution here?

I suppose so. I don't think that it matters much if the crossfeed DSP is before or after the convolver, the results should be almost equal.
Title: foo_convolve - Impulse response convolver
Post by: slks on 11 August, 2007, 03:08:26 AM
Is there a way to get the convolver to work with 6-channel audio? I don't even need seperate impulses for each channel, just one to apply to all.
Title: foo_convolve - Impulse response convolver
Post by: TheTravis on 12 August, 2007, 03:12:28 PM
I think I've fallen love in...  Many thanks!
Title: foo_convolve - Impulse response convolver
Post by: gibson on 12 September, 2007, 02:06:23 PM
I'm running foobar2k v0.9.4.4 and I get en error stating that foobar "Failed to load DLL: foo_convolve.dll
Reason: This component is missing a required dependency, or was made for different version of foobar2000."

So, how do I fix that?
Title: foo_convolve - Impulse response convolver
Post by: s33m33 on 13 September, 2007, 02:06:55 AM
I'm running foobar2k v0.9.4.4 and I get en error stating that foobar "Failed to load DLL: foo_convolve.dll
Reason: This component is missing a required dependency, or was made for different version of foobar2000."
So, how do I fix that?


same here. Dependency Walker highlights files mpr.dll & wzcdlg.dll.
even after downloading and placing those files in foobar & system32 directory, same problem occurs on launch.
Title: foo_convolve - Impulse response convolver
Post by: buktore on 13 September, 2007, 02:54:16 AM
I have no problem. it's work fine.
Title: foo_convolve - Impulse response convolver
Post by: foosion on 13 September, 2007, 05:52:58 AM
same here. Dependency Walker highlights files mpr.dll & wzcdlg.dll.
even after downloading and placing those files in foobar & system32 directory, same problem occurs on launch.

It is not recommended to attempt to fix component loading problems by downloading random DLL files and placing them all over your hard drive. Unless you know exactly what you are doing, you will likely do more harm than good, if you achieve anything at all. Also note that the Dependency Walker FAQ (http://www.dependencywalker.com/faq.html) has an entry dealing with MPR.DLL.

Which version of foobar2000 do you use? The convolver DLL that is linked to in the first post is made for foobar2000 0.8.x. If you use 0.9.x, you will have to get the convolver version from the official additional components page (http://www.foobar2000.org/components/).
Title: foo_convolve - Impulse response convolver
Post by: gibson on 13 September, 2007, 06:45:14 AM
Ah, downloading from the components page instead of from the link at the beginning of the thread fixed it (of course, since I'm running an 0.9 version...). I'm pretty sure that it wasn't obvious that the link in the thread was for v0.8 when I downloaded though. Or maybe I'm just stupid...  Either way, it works now, so I'm a happy camper. 
Title: foo_convolve - Impulse response convolver
Post by: s33m33 on 14 September, 2007, 12:16:26 AM
Ah, downloading from the components page instead of from the link at the beginning of the thread fixed it (of course, since I'm running an 0.9 version...). I'm pretty sure that it wasn't obvious that the link in the thread was for v0.8 when I downloaded though. Or maybe I'm just stupid...  Either way, it works now, so I'm a happy camper. 


this is so embarassing. i did the same thing 

thanks for the tip foosion
Title: foo_convolve - Impulse response convolver
Post by: Che55e on 11 January, 2008, 07:48:52 AM
hi,

is it possible to implement multi-channel support for the convolver somehow?
I'm trying to build up an active 4-way speaker system and it would be just perfect
to load 8 different FIR filters...

thanks...
Title: foo_convolve - Impulse response convolver
Post by: T&L on 14 April, 2008, 02:12:08 PM
Hi,

I have long time had a problem with visualisations(even build-in ones) skipping every 4 seconds when using Convolver. Is there anything on the Convolver's code that can be causing this behaviour?

I found that setting the playback thread priority on fb2k's advanced options to 3 or lower helps on the issue, but causes skipping when other programs are using cpu-time.

This visualisation skipping has been in every 0.9x foobar2000 I have tried, the last beta included.

Environment: 2.2GHz AMD Athlon XP, 512MB RAM, Windows XP SP2, foobar2000 0.9x, foo_convolve 0.3

Thanks in advance 
Title: foo_convolve - Impulse response convolver
Post by: HAlat on 02 June, 2008, 04:33:40 AM
How are things with crossfeed convolution? That would be so great to experiment with. Or has the development of this component ended?

My interest is in speaker simulation using headphones. I would be happy with symmetrical crossfeed using just one "stereo" impulse response, one channel for left and right direct sound effects and the other for left and right crossfeed effects. I don't think asymmetric true stereo crossfeed effects are that necessary since the ideal listening setting is symmetrical anyway.
Title: foo_convolve - Impulse response convolver
Post by: haaho on 03 October, 2008, 05:30:14 AM
Can you recommend me some impulse which makes the sound softer (warmer). I am using Audigy4,KS 24 bit.
Title: foo_convolve - Impulse response convolver
Post by: Eliteforce on 31 May, 2009, 09:38:01 PM
I have a few questions related to the Plugin:

a) Does anyone know of a visual/graphical wave editor that allows one to "adjust" the wave manually?

b) How does the length of the unitpulse2k "spike" affect the plugin?
Is there a way to make the recorded pulse more detailed (maybe by broadening or repeating the pulse a few times)?

Thanks.
Title: foo_convolve - Impulse response convolver
Post by: 2E7AH on 31 May, 2009, 10:11:24 PM
a) Does anyone know of a visual/graphical wave editor that allows one to "adjust" the wave manually?

Most editors can do that: Audacity (open source) or CEP/Audition
Just zoom enought in the wave and make "adjustments"
Title: foo_convolve - Impulse response convolver
Post by: acedriver on 18 July, 2009, 10:15:57 PM
not working in Win7 RC. hoping for an update.

Quote
Failed to load DLL: foo_convolve.dll
Reason: This component is not compatible with this version of Windows and needs to be recompiled with a newer version of the foobar2000 SDK; please contact the author of this component to obtain an updated version of this component.
Title: foo_convolve - Impulse response convolver
Post by: 2E7AH on 18 July, 2009, 10:33:13 PM
Which version are you using?
0.3 works fine on latest foobar and Windows 7
Title: foo_convolve - Impulse response convolver
Post by: acedriver on 19 July, 2009, 09:47:22 AM
my bad.. I didn't update 

since the last update date is 2006, I assume I have the same version
Title: foo_convolve - Impulse response convolver
Post by: Eliteforce on 11 October, 2009, 05:39:25 AM
I don't really know how this whole convolution thingy works and so this question might be "stupid", but I'll try anyway.

Lets say you record the unitpulse dirac played through an expensive and very balanced reference speaker in a anechoic chamber
and also record it played through your speaker at home.

Now I could take the home file to the studio and simulate how it sounds at home, right?

But what if I'd like to do it the other way around, namely trying to get the studio sound into the home. (at least in terms of tonality) 

Guess what would be need is a tool that takes two impulses and combines them somehow,
e.g. first inverse all "ups and downs" to get a flat sound and then optionally apply the other impulse, so you'd end up with the sound of that other impulse..

Does that make any sense?
Title: foo_convolve - Impulse response convolver
Post by: odyssey on 12 January, 2010, 11:53:38 AM
I made an impulse file with an EQ which works nicely. I also tried making an impulse file using the freeverb DSP to add some reverb - This file was not attenuated, but when I use it, the output is attenuated by ~7dB. Why? When I open the file in Audition it doesn't seem attenuated.

It seems very light on resources. If I apply a higher quality EQ (maybe a parametric EQ) to the impulse, would the quality still be very high and possibly higher than the built in EQ?
Title: foo_convolve - Impulse response convolver
Post by: zappa on 18 June, 2010, 12:31:39 PM
Hello Garf and others,


I don't know if this thread is still active / sometimes checked by the developer (that would be Garf, right)? I want to thank you for your effort - I am a fan and avid user of the convolving plugin.

Like many others I use Foobar2000 (v1.0.3) with the foo_upnp.dll plugin (http://www.foobar2000.org/components/view/foo_upnp) to stream lossless and HD music to my HD-capable streaming client (Linn Majik DS (http://www.linn.co.uk/files/81be18f3/MajikDS_infosheet.pdf)) and HiFi Stereo System. Works beautifully, as it merges the many advantages and impressive functionality of Foobar2000 (slim build, low use of system resources, plugins!!!) with the comfort of (bitperfect) HD network streaming and the sound quality of a good DAC/power electronics... This is truly a solution that meets audiophile needs!


Again like many others, I am also using foo_convolve.dll (a seperate DSP-Chain for foo_upnp.dll was recently introduced) to realize digital room correction and speaker driver-time-alignment ( example: http://www.acourate.com/ (http://www.acourate.com/) ). Which also works flawlessly. The only quibble I have would be that one has to manually change the convolution-filter file each time one plays a different resolution.


My question: Do you think it technically possible to update the plugin - so that one could prepare & load multiple filter files (with different resolutions, 16/44.1, 16/48, 24/96 and 24/192 for instance) into the plugin, and have it automatically change filter-files according to incoming file resolution? Ideally not dependent on foobar's default control playback - as people using foo_upnp.dll for streaming don't use those - but somehow "inside the plugin"? A "plugin-input-resolution sensitive multifilter-convolver", so to speak.


If technically possible (I know, even to a person like me who's not into programming the task seems complex), would it inspire you to try and implement this functionality? Or do you know someone who might be interested? It would add so much more value to an already gorgeous plugin. And make a lot of people even happier...



Best regards, Martin
Title: foo_convolve - Impulse response convolver
Post by: lvqcl on 18 June, 2010, 02:10:19 PM
I always add resampler DSP just before convolver.
Title: foo_convolve - Impulse response convolver
Post by: zappa on 19 June, 2010, 06:43:04 AM
I always add resampler DSP just before convolver.


That is what I wanted to avoid!

I know there are different resampling plugins for Foobar2000 (SOX (http://www.hydrogenaudio.org/forums/index.php?s=&showtopic=67373&view=findpost&p=600000) for instance). I briefly considered just having one convolving filter in 24/192 or 24/96 with SOX-resampling prior to foo_convolve.dll in the DSP-chain.

But ultimately my goal would be to have the convolved files streamed to the client without sample rate conversion. Which, as I said, would require filter files (and beforehand - acoustic measurement) in up to 4 different resolutions (16/44.1, 16/48, 24/96 and 24/192). I have a few FLAC files in 24 bit / 192 kHz, and lots in 24/96...

The reason is, I believe each resampling process potentially harms the signal. That is not just my personal opinion, but what many listening tests have shown... Plus, I have heard that resamplers have the biggest problems with material of a resolution which equals the one chosen as output resolution. Which would mean the worst performance on my HD material. I'd want to avoid that!

Granted, the most practical solution would be to first resample and then apply one high resolution filter file. Which is possible with the existing plugins. The audiophile approach is the more complex one, with multiple filters - one for each resolution. I hope to inspire someone to help make the latter possible...


Cheers, Martin
Title: foo_convolve - Impulse response convolver
Post by: j_b on 19 July, 2010, 02:06:51 PM
Martin,
I’m in the process of ripping my LP library and I noticed that some of my older LPs could benefit from a little EQ.  So, having the need and not wanting to wait for someone else to do it, I wrote it my self: A convolver plugin that chooses the impulse file based on a track tag and the current sample rate.

It took me a couple days because I am just learning the Foobar API and I don’t know C++. Most of the time was spent combing through example source code looking for bits that did what I needed. However, cutting and pasting invariably resulted in the compiler barfing or Foobar crashing. I don’t know the secret incantations to make C++ do what I want. I ended up writing the whole thing is C, bypassing most of the Foobar API. As a result, the plugin probably breaks a lot of rules and restrictions the API is meant to enforce. It works for me, though, and that’s all I want.

Please don’t ask me for a copy. What I did is experimental, just for me, and not release quality. I’m posting this to spur further development of foo_convolve to make it choose impulse files based on playing track’s tags and the current sample rate. On the other hand, if someone would point me to example code that can read the cached tags and read arbitrary audio files from the context of a DSP plugin, I could proceed and eventually produce something that could be shared.

Title: foo_convolve - Impulse response convolver
Post by: odyssey on 19 July, 2010, 02:35:36 PM
I wrote it my self: A convolver plugin that chooses the impulse file based on a track tag and the current sample rate.

    I had wet dreams about such feature in the convolver component!
Please don’t ask me for a copy. What I did is experimental, just for me, and not release quality. I’m posting this to spur further development of foo_convolve to make it choose impulse files based on playing track’s tags and the current sample rate. On the other hand, if someone would point me to example code that can read the cached tags and read arbitrary audio files from the context of a DSP plugin, I could proceed and eventually produce something that could be shared.

Please do! I love you 
Title: foo_convolve - Impulse response convolver
Post by: tnkz15153 on 10 September, 2010, 12:28:41 AM
Hello Garf ,
I hope you open the source code to the public.
Purpose:
・The recompile for the latest version.
・I want to remodel it to four channel output simultaneously.

(I am sorry by poor English. )
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 10 September, 2010, 01:15:47 AM
Hello Garf ,
I hope you open the source code to the public.

Not likely to happen, because:
?The recompile for the latest version.

The version on the official components site already works with the latest foobar2000. Also, it requires a closed source commercial library to do the convolving.
?I want to remodel it to four channel output simultaneously.

It should already support convolving as many channels input as long as the impulse has a matching number of channels.
Title: foo_convolve - Impulse response convolver
Post by: Eliteforce on 24 September, 2010, 06:00:25 PM
I noticed a problem with certain impulse responses where the impulse is not the first sample.

Since such impulse responses introduce a delay the audio track will start a couple of samples later and the end will be cut-off early by the same number of samples

It would be nice to have an option to throw away the initial delay samples and end the track normally.


edit: Please note that changing the impulse responses is not an option, because it will alter the results. :/
Title: foo_convolve - Impulse response convolver
Post by: Eliteforce on 25 September, 2010, 07:03:06 PM
Or instead of throwing away the initial delay samples / adding at the end maybe some kind of buffering and left shifting of the samples would work.
Title: foo_convolve - Impulse response convolver
Post by: kode54 on 25 September, 2010, 07:42:47 PM
Buffering would break gapless playback.

Another idea would be for you to add a silence:// track to the end of the conversion batch, and either convert all files to a single output track, or append them manually with an editor. Oh, and setting it to not reset the DSPs between tracks is essential for that manual padding to work.
Title: foo_convolve - Impulse response convolver
Post by: Eliteforce on 26 September, 2010, 05:46:42 AM
Cutting each file manually after conversion with a wave editor. That's not the most comfortable workaround, is it? 
Title: foo_convolve - Impulse response convolver
Post by: lvqcl on 26 September, 2010, 06:05:51 AM
And "Mix adjust" option doesn't work properly with such impulses...
Title: foo_convolve - Impulse response convolver
Post by: edd on 23 March, 2011, 12:41:06 PM
Hi,

here’s one more guy who’d like do convolve each stereo channel separately in order to simulate speaker over headphones. This thread doesn’t look like the plugin’s development is going on, but I’ll try to explain what would be necessary to do anyway:

A normal stereo recording has to channels. If you listen to it with speakers, you here both channels with both ears. Sounds like speakers do, including the room acoustics. Using headphones, you here the left channel with your left ear and the right channel with your right ear. Sounds sort of not so good.

In order to simulate speakers, the plugin would have to convert each stereo channel to a mono recording (which has two channels!), convolve the left two-channel mono signal with a stereo impulse response for sounds coming from the left (azimuth 30°), and convolve the right two-channel mono signal with a stereo impulse response for sounds coming from the right (azimuth 330° oder -30°). So each original stereo-channel has to be doubled, the twins have to be treated as stereo signals and convolved with a stereo impulse response (different ones for each twin couple/doubled stereo side), with makes the original stereo channel a new stereo signal. At the end, you have for channels, i.e. two stereo signals, which you have to mix. I hope my explanation isn’t to confusing. One important conclusion is that this can’t be done by combining the convolution plugin with a crossmixing plugin. This really wouldn’t work, never ever.

And there still isn’t any room response. What I described would sound as if your headphones were speakers in R³, so, with no reflections at all, as long as the HRTF you use is really only an HRTF, not including room information.

I really would appreciate this functionality in the plugin, because it is a lot of work to open every music file in Audacity, exporting the channels separately as mono files, convolve-processing them with foobar2000 using HRTFs, mixing them together again in Audacity and exporting all this as a new music file, which has a certain HRTF inherent. This would mean to have two different verions of the whole music collection.

I would instantly programm such a plugin for foobar2000, if I knew how.

It would be even greater though, to have this trick system wide, not only in foobar2000. Binaural phantasy.
Title: foo_convolve - Impulse response convolver
Post by: odyssey on 23 March, 2011, 12:57:12 PM
A normal stereo recording has to channels. If you listen to it with speakers, you here both channels with both ears. Sounds like speakers do, including the room acoustics. Using headphones, you here the left channel with your left ear and the right channel with your right ear. Sounds sort of not so good.

There are tons of components for foobar2000 optimized for headphone usage and also ones that does exactly what you propose - Why would you need to use convolver, to achieve just that?
Title: foo_convolve - Impulse response convolver
Post by: lvqcl on 23 March, 2011, 01:34:06 PM
@edd: http://www.hydrogenaudio.org/forums/index....showtopic=54966 (http://www.hydrogenaudio.org/forums/index.php?showtopic=54966)
Title: foo_convolve - Impulse response convolver
Post by: edd on 23 March, 2011, 02:00:28 PM
A normal stereo recording has to channels. If you listen to it with speakers, you here both channels with both ears. Sounds like speakers do, including the room acoustics. Using headphones, you here the left channel with your left ear and the right channel with your right ear. Sounds sort of not so good.

There are tons of components for foobar2000 optimized for headphone usage and also ones that does exactly what you propose - Why would you need to use convolver, to achieve just that?

As I said, you have to convolve each stereo channel with two HRTFs in order to simulate speakers.

@edd: http://www.hydrogenaudio.org/forums/index....showtopic=54966 (http://www.hydrogenaudio.org/forums/index.php?showtopic=54966)

That sounds great, have to look at it closer later on. Thanks!

BTW: I’ve tried the long way over Audacity with several music files. Sounds like speakers in an anechoic chamber (as it’s supposed to), which sounds like … headphones. Almost. But it works. I need the RIR of a proper recording studio.
Title: foo_convolve - Impulse response convolver
Post by: edd on 23 March, 2011, 08:19:41 PM
Unfortunately the plugin doesn’t work anymore with foobar.
Title: foo_convolve - Impulse response convolver
Post by: edd on 24 March, 2011, 01:52:29 PM
It would be even greater though, to have this trick system wide, not only in foobar2000. Binaural phantasy.

I made it (more or less), with JACK. Ingenious. I think, you don’t even need the impulse response of a good recording studio/mixing studio. You’ll just notice, that some recordings sound strange without the reverb of a room.
Title: foo_convolve - Impulse response convolver
Post by: romor on 26 March, 2011, 07:30:04 AM
It should already support convolving as many channels input as long as the impulse has a matching number of channels.

I can't make it to work:
Quote
Could not load impulse file (unexpected channel count).

Are you sure it's supported?
Title: foo_convolve - Impulse response convolver
Post by: Chesteta on 27 March, 2011, 11:42:32 AM
I use it all the time (Stereo Convolver 1.0.1) with version 1.1.5...

ahh, you werent talking about stereo convolver  just caught that
Title: foo_convolve - Impulse response convolver
Post by: AndreaT on 20 December, 2012, 02:43:04 PM
Hello Folks, as someone of you already stated, I confirm that the old 2006 plugin Convolver 0.3 doesn't work properly.

Please, is anyone there that could drive me to a good one for the current Foobar2000 v1.1 or the newer 1.2?


Thanks and regards, Andrea
Title: foo_convolve - Impulse response convolver
Post by: mudlord on 20 December, 2012, 08:21:17 PM
It would be even greater though, to have this trick system wide, not only in foobar2000. Binaural phantasy.

I made it (more or less), with JACK. Ingenious. I think, you don’t even need the impulse response of a good recording studio/mixing studio. You’ll just notice, that some recordings sound strange without the reverb of a room.


Or the idea of hooking DirectSound/Xaudio2/WinMM to make it in games/emulators sounds rather appealing....hmm....
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 December, 2012, 01:12:52 AM
I noticed a problem with certain impulse responses where the impulse is not the first sample.

Since such impulse responses introduce a delay the audio track will start a couple of samples later and the end will be cut-off early by the same number of samples

It would be nice to have an option to throw away the initial delay samples and end the track normally.


edit: Please note that changing the impulse responses is not an option, because it will alter the results. :/


The track duration should probably be extended by the FFT length.
Title: foo_convolve - Impulse response convolver
Post by: Garf on 21 December, 2012, 01:13:19 AM
Hello Folks, as someone of you already stated, I confirm that the old 2006 plugin Convolver 0.3 doesn't work properly.

Please, is anyone there that could drive me to a good one for the current Foobar2000 v1.1 or the newer 1.2?


Thanks and regards, Andrea


Hmm, I wasn't aware that it stopped working? What's wrong with it?
Title: foo_convolve - Impulse response convolver
Post by: AndreaT on 21 December, 2012, 06:50:54 AM
Hi Garf,

I found a plug-in called "Gapless Convolver " ver 0.4.5 that is working better than the official ver 0.3, however I am not sure it working perfectly. No time yet to measure.

Anyhow, I am looking for something reliable and stereo (I would use stereo inverted impulse response for DRC application).

Regards, Andrea
Title: foo_convolve - Impulse response convolver
Post by: AndreaT on 24 December, 2012, 10:41:35 AM
Hello Garf,

I tested again the Convolver v 0.3 with the current 1.2beta of Foobar and it crashes everytime I try to open it from "View -> DSP -> Convolver" option, while it doesn't crash if I open from "File -> Preference -> DSP Manager....".

Stated this, I have to ask you if this Convolver is capable to handle Stereo inpulse WAV file.

For my Digital Room Correction purpose I need to have L channel correct differently from R channel, so I created a Stereo WAV impulse file having the two channel different.
However, doing so I am getting a bad sound, the stereo image is very bad (instable) and the bass are very poor.

So, just for fun, I made a new Stereo WAV file having both channels indentical (so it is a true mono file) and containing a new correction impulse computed from the average response of the stereo channels (in other words: (L+R)/2.
Doing so I get a stable stereo image and the bass are back to a reasonable good and balanced musciality.
However, because I am driving both channels correction by the same average corrective impulse, I am not getting the best possible results.

Any explanation for this?
Could you help me getting what I would have?

Many thanks and Merry Xmass.
Andrea

Title: foo_convolve - Impulse response convolver
Post by: AndreaT on 16 January, 2013, 11:56:19 AM
Hello Garf, I am sorry to have to confirm that the "official" Convolver ver 0.3 has problems (bugs??) (at least when playing stereo impulse).

As explained, my usage of a convolver is for DRC application, so a reverse impulse response is used for frequency response linearization.

I verified it comparing it vs. the well known ConvolverVST 4.4 and the matter is immediately audible (no need to go further in the investigation, just listen to it and you will understand).

Looking forward
Regards, Andrea
Title: Re: foo_convolve - Impulse response convolver
Post by: gl.tter on 06 April, 2016, 06:13:56 PM
Great plug Garf.  Is it a zero-latency design?  If no, is the clean audio path (Mix Adjust = 0%) latency compensated?  There is strong phase issue with my own impulses for (say) Mix = 50% (it's possible they need editing).

BTW, I'd also love it if I could use different impulses for each sample rate (in my case it's for headphone or room corrections).