foo_convolve - Impulse response convolver, 'Mother of all effects' plugin |
foo_convolve - Impulse response convolver, 'Mother of all effects' plugin |
Jun 20 2003, 20:50
Post
#1
|
|
![]() Server Admin Group: Admin Posts: 4808 Joined: 24-September 01 Member No.: 13 |
Download for foobar2000 0.8.x (250K)
Please see the official additional 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 Edit: Added download instructions for foobar2000 0.9.x compatible version. This post has been edited by foosion: Sep 13 2007, 10:56 |
|
|
|
![]() |
Jun 25 2003, 12:56
Post
#2
|
|
|
Group: Members Posts: 265 Joined: 12-January 03 Member No.: 4542 |
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). 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/ 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). This post has been edited by DickD: Jun 25 2003, 13:04 |
|
|
|
Garf foo_convolve - Impulse response convolver Jun 20 2003, 20:50
xbenchman Thanks Garf,
Looks like a new toy to play with. Jun 20 2003, 21:08
Melomane ERROR (CORE) : Failed to load DLL: foo_convolve.dl... Jun 20 2003, 21:32
Garf Get libmmd.dll from rarewares. Does it solve thing... Jun 20 2003, 21:48
DigitalMan Garf,
Thanks for creating this - it could be extre... Jun 20 2003, 21:58
Garf I reuploaded it, the new version does not need lib... Jun 20 2003, 21:59
Garf QUOTE (DigitalMan @ Jun 20 2003 - 10:58 PM)Qu... Jun 20 2003, 22:06
DigitalMan QUOTE (Garf @ Jun 20 2003 - 01:06 PM)QUOTE (D... Jun 20 2003, 22:22
Garf QUOTE Thanks, I think I can make this work for equ... Jun 20 2003, 22:30
Garf Thanks to Case the example impulses are now in Wav... Jun 20 2003, 22:37
Canar QUOTE (Readme.txt)It can do an 2 048 tap equalizat... Jun 21 2003, 00:36
Garf QUOTE (Canar @ Jun 21 2003 - 01:36 AM)QUOTE (... Jun 21 2003, 00:45
Canar QUOTE (Garf @ Jun 20 2003 - 03:45 PM)As expla... Jun 21 2003, 05:38
Garf QUOTE (Canar @ Jun 21 2003 - 06:38 AM)QUOTE (... Jun 21 2003, 09:18
Canar QUOTE (Garf @ Jun 21 2003 - 12:18 AM)How is t... Jun 21 2003, 18:33
Garf It's possible. I don't think it has much o... Jun 21 2003, 18:38
lucpes I may have found a bug:
[speakers off!] downl... Jun 21 2003, 22:42
lucpes Problem "solved" by keeping the impulse ... Jun 21 2003, 23:01
Garf It's a bug - the impulse doesn't get loade... Jun 21 2003, 23:09
Garf Uploaded new version with bugfixes and speed impro... Jun 21 2003, 23:21
Messer Thanks for this truly essential tool, Garf.
Tiny r... Jun 22 2003, 02:16
_Shorty you don't think this type of thing would/shoul... Jun 22 2003, 02:50
Messer QUOTE (_Shorty @ Jun 22 2003 - 03:50 AM)you d... Jun 22 2003, 03:53
_Shorty I'm not strictly confident that a mix control ... Jun 22 2003, 09:48
lucpes QUOTE (Garf @ Jun 21 2003 - 10:21 PM)Uploaded... Jun 22 2003, 10:28
Garf Updated
- Added auto level adjustment
- Added Wet... Jun 22 2003, 14:18
Garf QUOTE (lucpes @ Jun 22 2003 - 11:28 AM)BUG... Jun 22 2003, 14:22
Messer QUOTE (Garf @ Jun 22 2003 - 03:18 PM)- Added ... Jun 22 2003, 16:27
DigitalMan Garf,
Can you add a cross channel feature? This w... Jun 22 2003, 22:08
Garf QUOTE Can you add a cross channel feature?
I don... Jun 23 2003, 00:38
Messer QUOTE (Garf @ Jun 22 2003 - 03:18 PM)- Added ... Jun 24 2003, 03:19
Garf Yay, of course. I'll have to look whether this... Jun 24 2003, 14:31
Garf I just checked, and it does seem to work correctly... Jun 24 2003, 15:48
Messer D'oh! You're right.
Of course I tried ... Jun 24 2003, 16:34
Garf Yup...
It's padded out with silence because s... Jun 24 2003, 16:46
Canar Could you post this component on Jan's 3rd Par... Jun 24 2003, 16:59
DickD QUOTE (Garf @ Jun 23 2003 - 12:38 AM)QUOTE
C... Jun 24 2003, 18:38
Garf Okay, two thoughts:
1) Maybe it would be better t... Jun 24 2003, 19:05
Garf QUOTE BTW, can I ask why you do an FFT in your plu... Jun 25 2003, 14:06
KikeG QUOTE (DickD @ Jun 25 2003 - 12:56 PM)For sim... Jun 25 2003, 14:18
DickD QUOTE (Garf @ Jun 25 2003 - 02:06 PM)The conv... Jun 25 2003, 15:38
Garf QUOTE Ah, seeing that you use FFTs to actually per... Jun 25 2003, 16:21
tacitus10 Brilliant plugin!
I was wondering if you migh... Jun 25 2003, 18:01
Garf For regulating delay edit the impulse. It makes no... Jun 25 2003, 18:40
tacitus10 All professional digital reverbs have pre-delay sl... Jun 27 2003, 19:42
Garf I don't care what design mistakes other people... Jun 27 2003, 20:14
tacitus10 Lexicon, TC, & Waves units do not use impulses... Jun 28 2003, 15:09
kode54 Another interesting proposition, possibly required... Jun 28 2003, 15:38
Canar QUOTE (tacitus10 @ Jun 28 2003 - 06:09 AM)Lex... Jun 29 2003, 20:00
kode54 Correction for previous request, I have no idea ho... Jun 30 2003, 09:17
paradynamic How does one go about converting Sound Forge impul... Jul 9 2003, 00:25
kode54 Feed that unitpulse2k.wav through it. You can trim... Jul 9 2003, 02:41
Melomane MIX ADJUST not work fine here.
Load impulse file,... Jul 19 2003, 14:29
Messer Melomane, read whole thread - I had the same ... Jul 19 2003, 15:20
Melomane Thank you Messer, now i understand.
i have use fil... Jul 19 2003, 15:53
Messer QUOTE (Garf @ Jun 27 2003, 09:14 PM)I don... Jul 19 2003, 16:13
kode54 There is also no way to compensate for that on out... Jul 20 2003, 01:05
Garf kode54 is correct. It's also reason why the in... Jul 20 2003, 14:26
Messer Nah, that's not really a whining, I was just ... Jul 20 2003, 15:20
tigre Garf, in case you need some more whining as motiva... Dec 1 2003, 09:20
WaldoMonster Where can I download the latest foo_convolve plugi... Dec 29 2003, 00:23
tigre QUOTE (WaldoMonster @ Dec 29 2003, 01:23 AM)W... Dec 29 2003, 01:24
WaldoMonster QUOTE (tigre @ Dec 29 2003, 01:24 AM)QUOTE (W... Dec 29 2003, 10:45
tacitus10 I was wondering the processing pipeline of FooConv... Jan 18 2004, 13:51
Garf QUOTE (tacitus10 @ Jan 18 2004, 02:51 PM)Impu... Jan 18 2004, 15:41
kelesh So does anybody have a good impulse for use with S... Jan 30 2004, 11:46
Messer QUOTE (kelesh @ Jan 30 2004, 12:46 PM)So does... Jan 30 2004, 12:00
Garf QUOTE (Messer @ Jan 30 2004, 01:00 PM)QUOTE (... Jan 30 2004, 15:17
Mhenckel QUOTE (Garf @ Jun 25 2003, 03:06 PM)This is w... Feb 2 2004, 09:04
Pio2001 Is it possible to add support for one impulse resp... Apr 24 2004, 14:30
Paranoia Exhibited *very* strange behaviour.
Upon first r... Apr 24 2004, 17:31
Garf QUOTE (Pio2001 @ Apr 24 2004, 03:30 PM)Is it ... Jul 29 2004, 18:45
Pio2001 I don't know.
If you know as a fact that it w... Jul 31 2004, 03:32
Garf QUOTE (Pio2001 @ Jul 31 2004, 04:32 AM)though... Jul 31 2004, 12:09
Wizard After reading about foo_convolve, I decided to use... Nov 7 2004, 12:52
Garf Just feed the wav through winamp?? Nov 7 2004, 13:52
upNorth I think Wizard is suggesting that Winamp has a for... Nov 7 2004, 14:14
Wizard QUOTE (upNorth @ Nov 7 2004, 04:14 PM)I think... Nov 7 2004, 14:21
wimms Hi,
Garf, you planned to add cross-channel convol... Dec 1 2004, 16:07
Xenion will there pleeease be a 0.9 version when it's... Jan 8 2006, 22:36
Garf QUOTE (Xenion @ Jan 8 2006, 11:36 PM)will the... Jan 21 2006, 19:12
CSMR Could Garf or someone else tell me what the functi... Jan 21 2006, 17:38
CSMR Bump. If this convolver just convolves with a sing... Jan 26 2006, 06:34
graham_mitchell QUOTE (CSMR @ Jan 26 2006, 06:34 AM)Bump. If ... Mar 15 2006, 22:16
kadajawi QUOTE (graham_mitchell @ Mar 15 2006, 01:16 P... Mar 18 2006, 16:08
CSMR Bump Feb 1 2006, 09:56
tacitus10 I was wondering if convolver in 0.9 will support 5... Mar 19 2006, 15:55
tacitus10 Any news on 0.9 convolver? Mar 22 2006, 04:53
skyhopper88 This is the last thing I need to feel at home with... Apr 20 2006, 21:20
Xenion same here
also waiting Apr 20 2006, 21:24
Wedge i'm also missing the 0.9 convolver. any plans ... Apr 23 2006, 11:58
kaiwei I would go down on my knees if I have to.
Please,... Apr 25 2006, 17:14
askoff I've been waiting this plugin also and I need ... Apr 25 2006, 18:38
tintin814 is there ant plan for the development to support f... Apr 29 2006, 07:41
deandob The convolver is not part of the standard foobar i... May 6 2006, 23:41
Wedge it's available now @ http://www.foobar2000.org... May 7 2006, 21:07
saivert Regarding the way Equalization works in Winamp
Win... Jul 30 2006, 06:36
foosion QUOTE (saivert @ Jul 30 2006, 07:36) Rega... Jul 30 2006, 10:07
saivert QUOTE (foosion @ Jul 30 2006, 11:07) I ho... Aug 13 2006, 22:50![]() ![]() |
|
Lo-Fi Version | Time is now: 18th May 2013 - 12:52 |