HydrogenAudio

Hosted Forums => foobar2000 => 3rd Party Plugins - (fb2k) => Topic started by: lvqcl on 2010-11-21 01:55:18

Title: foo_dsp_convolver
Post by: lvqcl on 2010-11-21 01:55:18
Here's another convolver plugin: foo_dsp_convolver.

Official plugin (foo_convolve (http://www.foobar2000.org/components/view/foo_convolve)) adds small but noticeable gaps between songs if used in converter. "Don't reset DSP..." option solves this problem, but slows down conversion, that's why I wrote foo_dsp_convolver.
Also, it allows to use "Mix adjust" slider with linear-phase impulses, and supports more than 2 channels.

Changelog:
0.4.8
- minor fixes;
- added signal extrapolation to reduce a possibility of clicks during track change;
- recompiled with latest SDK (2018-10-11). Works with foobar2000 1.4.x; users of 1.3.x need to download and install MSVC redist (here (https://aka.ms/vs/15/release/VC_redist.x86.exe)).

Old versions are available here (http://www.hydrogenaudio.org/forums/index.php?showtopic=85106)
Title: foo_dsp_convolver
Post by: mudlord on 2010-11-21 11:30:52
Just out of curiosity, I noticed 3 different FFT methods in the source...

May I ask why thats so?  Speed testing?
Title: foo_dsp_convolver
Post by: lvqcl on 2010-11-21 12:47:19
Well...  FFmpeg works only with FFT size between 16 and 65536, ooura works everywhere but slowest of them, etc...
And just for fun. "Speed testing" is not implemented.
Title: foo_dsp_convolver
Post by: Yegor on 2010-11-22 04:21:46
Quote
btw: I wonder why there's no access to fb2k internal FFT routines...
Because there may be no such thing I guess. Remove standard DSPs, decoders, vis and voila! − no FFTs left at all. Right?
Title: foo_dsp_convolver
Post by: mudlord on 2010-11-22 09:58:30
iirc, FB2K uses modded versions of KISSFFT for FFT processing.
Title: foo_dsp_convolver
Post by: lvqcl on 2010-11-22 16:55:15
foobar2000 does use FFT for spectrograms & other visualisation.
Code: [Select]
    //! Retrieves spectrum for audio data at specified offset (see get_absolute_time()), with specified FFT size.

    virtual bool get_spectrum_absolute(audio_chunk & p_chunk,double p_offset,unsigned p_fft_size) = 0;
Title: foo_dsp_convolver
Post by: Yirkha on 2010-11-23 20:59:49
[font= "Courier New"]virtual void visualisation_stream_v3::chunk_to_spectrum(audio_chunk const & chunk, audio_chunk & spectrum, double centerOffset) = 0;[/font]
Title: foo_dsp_convolver
Post by: lvqcl on 2010-11-23 21:50:39
That doesn't matter much, but... it isn't clear: does it return full FFT results or ampllitude only (ie sqrt(re*re + im*im))?
Title: foo_dsp_convolver
Post by: Yirkha on 2010-11-23 22:32:48
For this input chunk:
[font= "Courier New"]{m_data={...} m_srate=44100 m_nch=1 m_setup=4 m_samples=512}[/font]
I got this output chunk:
[font= "Courier New"]{m_data={...} m_srate=44100 m_nch=1 m_setup=4 m_samples=256}[/font]
So I assume the latter.
Title: foo_dsp_convolver
Post by: sshd on 2010-12-18 01:06:49
This convolver does not seem to work at all. I use filters generated by Audiolense and they work fine with the old convolver.

With this convolver I only get some sound in right channel, although only left channel active in peak meter.

I have tried different sample rates: 44.1k, 48k and 96.
Also different filter lengths: 16k, 64k and 132k taps.
Same result - only some sound in right channel.
Title: foo_dsp_convolver
Post by: lvqcl on 2010-12-18 12:47:40
Thanks for the report. Try ver. 0.3.5.

Quote
I only get some sound in right channel, although only left channel active in peak meter.

BTW, are you sure that your speakers correctly connected?
Title: foo_dsp_convolver
Post by: sshd on 2010-12-18 22:20:09
0.3.5 fixed my problems with the single channel. My setup was connected wrong as you suspected.

A big thanks for your work on this plugin. The most exciting feature for me is the multi-channel support, which the original convolver lacks. Together with the matrix mixer plugin I can finally get to play around with the active crossover filters that Audiolense XO can make.
Title: foo_dsp_convolver
Post by: Chesteta on 2010-12-24 17:33:54
Thank you for your time and effort towards improving the convolver plugin, I use the original convolver ALL the time

I was wondering in regards to your plugin, apart from the speed increase from FFTW, is there any actual *quality* gain (measurable in some way, noise floor perhaps)?  I noticed that with the FFTW files in the foobar2000 directory, the program is using ~150mb ram more  I tried running both the 'patient' mode FFTW file and the 'exhaustive' one (I generated both) though I did not see much if any difference (a few mb maybe?).  This behavior happens even if the plugin is not in use in the DSP, which seems odd to me but then again I probably don't know enough about it

If there is actually a quality difference (accuracy difference), is there any way you could implement your 'techniques' in a way that would allow for stereo convolution too? http://people.bu.edu/edlarson/stereoconv.html (http://people.bu.edu/edlarson/stereoconv.html) is available however I have a feeling your methods of processing are probably superior.

Note: I got the idea about FFTW being of better quality/accuracy from their website http://www.fftw.org/accuracy/ (http://www.fftw.org/accuracy/) (probably not surprising)

Thank you for your time

-Matt

Title: foo_dsp_convolver
Post by: lvqcl on 2010-12-24 18:14:01
I was wondering in regards to your plugin, apart from the speed increase from FFTW, is there any actual *quality* gain (measurable in some way, noise floor perhaps)?

I doubt it. Maybe FFTW is a bit more accurate but the 'noise floor' is very low anyway.

I noticed that with the FFTW files in the foobar2000 directory, the program is using ~150mb ram more

Oops. I'll try to reduce the amount of memory reserved for FFTW.
Title: foo_dsp_convolver
Post by: Chesteta on 2011-01-03 19:36:21
The current version in this thread says 0.3.5, however it has been updated to 0.3.6 which has the memory issues fixed  (thank you lvqcl)
Title: foo_dsp_convolver
Post by: romor on 2011-01-03 22:42:31
0.3.6 on foobar 1.1.2b2:

Quote
Failed to load DLL: foo_dsp_convolver.dll
Reason: Invalid access to memory location


0.3.5 was working fine
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-03 23:21:48
Works here perfectly. fb2k v1.1.2 beta 2, windows7 x64.

Pls tell me details about this problem.
Title: foo_dsp_convolver
Post by: romor on 2011-01-03 23:36:38
Not much to tell: Win7 U 32b, with fftw-wisdom.dat in foobar folder. I downloaded your component, d&d in foobar and on start that error pops. Previous version was working fine, as said
If you want me to run some debug tests, PM me

[edit]: On exit foobar crashes:

Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 01EBFB8Eh
Access violation, operation: write, address: 01EBFB8Eh

Call path not available.

Code bytes (01EBFB8Eh):
01EBFB4Eh:  6E 00 20 00 28 00 54 00 72 00 61 00 64 00 69 00
01EBFB5Eh:  74 00 69 00 6F 00 6E 00 61 00 6C 00 20 00 4D 00
01EBFB6Eh:  6F 00 6E 00 67 00 6F 00 6C 00 69 00 61 00 6E 00
01EBFB7Eh:  29 00 24 00 4D 00 6F 00 6E 00 67 00 6F 00 6C 00
01EBFB8Eh:  69 00 61 00 6E 00 20 00 28 00 54 00 72 00 61 00
01EBFB9Eh:  64 00 69 00 74 00 69 00 6F 00 6E 00 61 00 6C 00
01EBFBAEh:  20 00 4D 00 6F 00 6E 00 67 00 6F 00 6C 00 69 00
01EBFBBEh:  61 00 6E 00 29 00 24 00 50 00 65 00 6F 00 70 00

Stack (001BF8D8h):
001BF8B8h:  00000000 29B27025 FFFFFD34 000002E4
001BF8C8h:  FFFFFD34 000002CC 00000018 00000000
001BF8D8h:  7722BB45 020907D0 7FFDC000 7FFDF000
001BF8E8h:  00000000 00000040 001BF988 77233A07
001BF8F8h:  00204688 77371CAF 772A7340 772A7380
001BF908h:  00000000 00000000 00000000 00000000
001BF918h:  00000000 00000000 00000000 00000000
001BF928h:  00000000 00000000 00000000 00000000
001BF938h:  00000000 00000000 00000000 00000000
001BF948h:  00000000 00000000 00000000 005C005A
001BF958h:  001F28DE 00000000 7FFDC000 00000000
001BF968h:  00000000 7FFDF000 001BF8FC 001BF4D8
001BF978h:  001BF9F8 771ED75D 000D1BC7 FFFFFFFE
001BF988h:  001BF99C 7723384D 0239F51C 7722F0C0
001BF998h:  0239F520 001BF9B0 75892B04 00000000
001BF9A8h:  77E8F3B0 FFFFFFFF 001BF9BC 011FC369
001BF9B8h:  00000000 001BFA08 011FC595 00000000
001BF9C8h:  219F8510 00000000 00000000 7FFDC000
001BF9D8h:  0239F520 0239F51C 0239FBF0 0239F520
001BF9E8h:  012257A0 01225798 001BF9C8 001BF4D4

Registers:
EAX: 01EBFB8E, EBX: 7FFDC000, ECX: 020907D0, EDX: 00206054
ESI: 0000000C, EDI: 002046C0, EBP: 001BF8F0, ESP: 001BF8D8

Unable to identify crash location!

Loaded modules:
foobar2000                      loaded at 010C0000h - 012B0000h
ntdll                            loaded at 771D0000h - 7730C000h
kernel32                        loaded at 75840000h - 75914000h
KERNELBASE                      loaded at 75550000h - 7559A000h
COMCTL32                        loaded at 74210000h - 743AE000h
msvcrt                          loaded at 75BB0000h - 75C5C000h
GDI32                            loaded at 75B60000h - 75BAE000h
USER32                          loaded at 75770000h - 75839000h
LPK                              loaded at 759A0000h - 759AA000h
USP10                            loaded at 75AC0000h - 75B5D000h
SHLWAPI                          loaded at 76CE0000h - 76D37000h
DSOUND                          loaded at 70520000h - 70592000h
ADVAPI32                        loaded at 76AE0000h - 76B80000h
sechost                          loaded at 77330000h - 77349000h
RPCRT4                          loaded at 77350000h - 773F1000h
ole32                            loaded at 76B80000h - 76CDC000h
WINMM                            loaded at 705A0000h - 705D2000h
POWRPROF                        loaded at 73890000h - 738B5000h
SETUPAPI                        loaded at 77030000h - 771CD000h
CFGMGR32                        loaded at 754D0000h - 754F7000h
OLEAUT32                        loaded at 76E30000h - 76EBF000h
DEVOBJ                          loaded at 75500000h - 75512000h
UxTheme                          loaded at 740D0000h - 74110000h
dbghelp                          loaded at 71300000h - 713EB000h
SHELL32                          loaded at 75E90000h - 76AD9000h
zlib1                            loaded at 5A4C0000h - 5A4D4000h
shared                          loaded at 6F220000h - 6F24B000h
imagehlp                        loaded at 75E60000h - 75E8A000h
COMDLG32                        loaded at 75920000h - 7599B000h
Secur32                          loaded at 751C0000h - 751C8000h
SSPICLI                          loaded at 751E0000h - 751FA000h
CRYPT32                          loaded at 75380000h - 7549C000h
MSASN1                          loaded at 75370000h - 7537C000h
gdiplus                          loaded at 73F40000h - 740D0000h
IMM32                            loaded at 75710000h - 7572F000h
MSCTF                            loaded at 75630000h - 756FC000h
CRYPTBASE                        loaded at 75250000h - 7525C000h
CLBCatQ                          loaded at 76DA0000h - 76E23000h
MMDevApi                        loaded at 73E00000h - 73E39000h
PROPSYS                          loaded at 74110000h - 74205000h
winroll                          loaded at 10000000h - 10007000h
dwmapi                          loaded at 73DE0000h - 73DF3000h
foo_dsp_crossfeed                loaded at 00860000h - 0088A000h
foo_dsp_centercut                loaded at 008A0000h - 008C6000h
foo_input_alac                  loaded at 008F0000h - 0090D000h
foo_verifier                    loaded at 00D70000h - 00DB3000h
foo_input_dts                    loaded at 6F1B0000h - 6F213000h
foo_musicbrainz                  loaded at 6F150000h - 6F1AC000h
WINHTTP                          loaded at 73BF0000h - 73C48000h
webio                            loaded at 73B30000h - 73B7F000h
libfftw3f-3                      loaded at 63740000h - 6380B000h
foo_dsp_std                      loaded at 6CAE0000h - 6CB28000h
foo_masstag                      loaded at 02030000h - 02084000h
foo_dsp_bs2b                    loaded at 00F50000h - 00F77000h
foo_abx                          loaded at 01F70000h - 01FA2000h
foo_chacon                      loaded at 6F6D0000h - 6F6F4000h
foo_skip                        loaded at 6E860000h - 6E882000h
foo_vis_shpeck                  loaded at 6CA90000h - 6CAD1000h
MSIMG32                          loaded at 73970000h - 73975000h
foo_dsp_fsurround_beta          loaded at 033D0000h - 034A4000h
WINSPOOL                        loaded at 707B0000h - 70801000h
foo_dsp_freeverb                loaded at 021E0000h - 021FE000h
foo_dsp_downmix                  loaded at 02350000h - 02388000h
foo_benchmark                    loaded at 027A0000h - 027CD000h
foo_dsp_crossfader              loaded at 027D0000h - 02802000h
foo_dsp_loudspeakereq            loaded at 02E20000h - 02E4C000h
foo_ac3                          loaded at 02EA0000h - 02ED0000h
foo_playcount                    loaded at 6CF10000h - 6CF4C000h
foo_facets                      loaded at 03540000h - 035C1000h
foo_cdda                        loaded at 6CA40000h - 6CA8E000h
foo_rgscan                      loaded at 6C9F0000h - 6CA3D000h
foo_ui_std                      loaded at 6C8D0000h - 6C9E8000h
foo_bitcompare                  loaded at 032F0000h - 03318000h
foo_run                          loaded at 035F0000h - 0364F000h
foo_dsp_prvb                    loaded at 03360000h - 0338B000h
foo_musicdns                    loaded at 6C8A0000h - 6C8C1000h
libofa                          loaded at 6C860000h - 6C891000h
libfftw3-3                      loaded at 03DF0000h - 03F25000h
MSVCP100                        loaded at 6C7F0000h - 6C859000h
MSVCR100                        loaded at 6C730000h - 6C7EE000h
foo_uie_wsh_panel_mod            loaded at 6C670000h - 6C72E000h
foo_convolve                    loaded at 03A30000h - 03A81000h
foo_osd                          loaded at 037B0000h - 037E1000h
foo_dsp_mm                      loaded at 038B0000h - 038F1000h
foo_dsp_fakegapless              loaded at 73860000h - 7387A000h
foo_dsp_effect                  loaded at 03A90000h - 03AC7000h
foo_texttools                    loaded at 6C630000h - 6C664000h
foo_jesus                        loaded at 6C610000h - 6C62A000h
foo_fileops                      loaded at 6C5C0000h - 6C607000h
foo_runcmd                      loaded at 6C580000h - 6C5B3000h
foo_freedb2                      loaded at 6C540000h - 6C580000h
foo_input_tta                    loaded at 03BA0000h - 03BE2000h
foo_dsp_lowpass                  loaded at 03B20000h - 03B52000h
foo_channel_mixer                loaded at 03D10000h - 03D4A000h
foo_uie_biography                loaded at 6C4E0000h - 6C538000h
foo_random                      loaded at 03D50000h - 03D89000h
foo_dsp_vlevel                  loaded at 03B80000h - 03B8B000h
MSVCR80                          loaded at 705E0000h - 7067B000h
foo_input_std                    loaded at 6C380000h - 6C4D5000h
foo_textdisplay                  loaded at 6C340000h - 6C37F000h
foo_input_monkey                loaded at 03F30000h - 03F78000h
foo_vst                          loaded at 6C310000h - 6C33A000h
MSVCP90                          loaded at 713F0000h - 7147E000h
MSVCR90                          loaded at 71480000h - 71523000h
foo_dsp_delta                    loaded at 03F90000h - 03FAF000h
foo_discogs                      loaded at 6C2A0000h - 6C301000h
WININET                          loaded at 76F10000h - 77028000h
Normaliz                        loaded at 77320000h - 77323000h
iertutil                        loaded at 75C60000h - 75E59000h
urlmon                          loaded at 759B0000h - 75AC0000h
XmlLite                          loaded at 75520000h - 7554F000h
foo_np_simple                    loaded at 6C270000h - 6C29E000h
foo_converter                    loaded at 6C1F0000h - 6C26B000h
foo_dsp_soundtouch              loaded at 03FF0000h - 04016000h
foo_input_tak                    loaded at 6C1A0000h - 6C1E4000h
tak_deco_lib                    loaded at 04050000h - 04070000h
foo_dsp_fsurround                loaded at 04080000h - 040B1000h
AUDIOSES                        loaded at 730B0000h - 730E6000h
SXS                              loaded at 75260000h - 752BF000h
JScript                          loaded at 6C0E0000h - 6C192000h
VERSION                          loaded at 74890000h - 74899000h
CRYPTSP                          loaded at 74D70000h - 74D86000h
rsaenh                          loaded at 74B20000h - 74B5B000h
RpcRtRemote                      loaded at 752C0000h - 752CE000h
scrrun                          loaded at 6C0B0000h - 6C0DA000h
WindowsCodecs                    loaded at 73CE0000h - 73DDB000h
apphelp                          loaded at 75200000h - 7524B000h
WS2_32                          loaded at 75730000h - 75765000h
NSI                              loaded at 75700000h - 75706000h
mswsock                          loaded at 74D30000h - 74D6C000h
DNSAPI                          loaded at 74C00000h - 74C44000h
IPHLPAPI                        loaded at 72350000h - 7236C000h
WINNSI                          loaded at 72340000h - 72347000h
rasadhlp                        loaded at 72B80000h - 72B86000h
psapi                            loaded at 77310000h - 77315000h

Stack dump analysis:
Address: 7722BB45h (ntdll+5BB45h), symbol: "RtlTimeToTimeFields" (+3A8h)
Address: 77233A07h (ntdll+63A07h), symbol: "LdrShutdownProcess" (+97h)
Address: 77371CAFh (RPCRT4+21CAFh), symbol: "RpcStringBindingParseW" (+174h)
Address: 772A7340h (ntdll+D7340h), symbol: "NlsAnsiCodePage" (+1F0h)
Address: 772A7380h (ntdll+D7380h), symbol: "NlsAnsiCodePage" (+230h)
Address: 771ED75Dh (ntdll+1D75Dh), symbol: "RtlAddMandatoryAce" (+5ADh)
Address: 7723384Dh (ntdll+6384Dh), symbol: "RtlExitUserProcess" (+74h)
Address: 7722F0C0h (ntdll+5F0C0h), symbol: "RtlDecodePointer" (+0h)
Address: 75892B04h (kernel32+52B04h), symbol: "ExitProcess" (+15h)
Address: 011FC369h (foobar2000+13C369h)
Address: 011FC595h (foobar2000+13C595h)
Address: 012257A0h (foobar2000+1657A0h)
Address: 01225798h (foobar2000+165798h)
Address: 011FCB70h (foobar2000+13CB70h)
Address: 011FC5BBh (foobar2000+13C5BBh)
Address: 011FA1C0h (foobar2000+13A1C0h)
Address: 01200C0Fh (foobar2000+140C0Fh)
Address: 011FCB70h (foobar2000+13CB70h)
Address: 75891194h (kernel32+51194h), symbol: "BaseThreadInitThunk" (+12h)
Address: 7722B495h (ntdll+5B495h), symbol: "RtlInitializeExceptionChain" (+63h)
Address: 77371FCBh (RPCRT4+21FCBh), symbol: "RpcStringBindingParseW" (+490h)
Address: 758A2B55h (kernel32+62B55h), symbol: "UnhandledExceptionFilter" (+0h)
Address: 758A2B55h (kernel32+62B55h), symbol: "UnhandledExceptionFilter" (+0h)
Address: 771ED75Dh (ntdll+1D75Dh), symbol: "RtlAddMandatoryAce" (+5ADh)
Address: 7722B468h (ntdll+5B468h), symbol: "RtlInitializeExceptionChain" (+36h)
Address: 011FA205h (foobar2000+13A205h)
Address: 011FA205h (foobar2000+13A205h)
Address: 705213B0h (DSOUND+13B0h)
Address: 7052126Ch (DSOUND+126Ch)
Address: 705217ECh (DSOUND+17ECh)
Address: 7052126Ch (DSOUND+126Ch)
Address: 73F556ADh (gdiplus+156ADh)
Address: 70521394h (DSOUND+1394h)
Address: 705212E0h (DSOUND+12E0h)
Address: 70521AB0h (DSOUND+1AB0h)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 7052126Ch (DSOUND+126Ch)
Address: 70521388h (DSOUND+1388h)

Unfortunately, I can't send reports from affected PC, but they look similar with "Unable to identify crash location!"
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-04 12:34:15
I cannot find the source of this problem, but

1. try foo_dsp_convolver 0.3.7 (changes between 0.3.6 and 0.3.7 are not related with your problem but who knows...)
2. try to delete foo_dsp_downmix.dll and foo_dsp_fsurround.dll (they use libfftw3f-3.dll too) and see what happens.
3. try to delete fftw-wisdom.dat.
Title: foo_dsp_convolver
Post by: romor on 2011-01-04 22:12:38
I should have tried above.
I thought deleting fft library used by pro_optimizer components, but as it was the same file as your component is using, I didn't do it. Then I noticed foo_musicdns was using libfftw3-3.dll and knowing that I had problem with this component in past I disable it, but that didn't change anything

New version, didn't change issue, but deleting "fftw-wisdom.dat" solved the case, so there is some problem. I made new fftw-wisdom file, but problem stays
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-04 22:39:19
If your CPU is Core2 or at least has SSE2 support you can also try fftw-wisdom from this archive (http://www.hydrogenaudio.org/forums/index.php?act=attach&type=post&id=6276)
Title: foo_dsp_convolver
Post by: Chesteta on 2011-01-04 22:50:38
will the generated wisdom file be any different from the one generated from the other archive? (more optimized)
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-04 23:05:30
From FFTW manual: "It would be perfectly possible to export wisdom from a program running on one processor and import it into a program running on another processor. Doing so, however, would mean that the second program would use plans optimized for the first processor, instead of the one it is running on... The more the underlying hardware and software changes between the creation of wisdom and its use, the greater grows the risk of sub-optimal plans."

So it is better to generate wisdom on a target computer.
Title: foo_dsp_convolver
Post by: romor on 2011-01-05 00:03:22
If your CPU is Core2 or at least has SSE2 support you can also try fftw-wisdom from this archive (http://www.hydrogenaudio.org/forums/index.php?act=attach&type=post&id=6276)

Tried wizards: 18; 16; 8; 4; 0 without success on Celeron D 3 GHz (feat. MMX, SSE, SSE2, SSE3, ET64, XD)
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-05 00:08:19
what about fftw-wisdom_24.dat?
Title: foo_dsp_convolver
Post by: romor on 2011-01-05 00:12:02
same, unfortunately
Title: foo_dsp_convolver
Post by: lvqcl on 2011-01-05 00:29:32
Well, I have no idea why such things happen. You can continue to use 0.3.5, or delete fftw-wisdom.dat to disable FFTW support.

(You can also try empty fftw-wisdom.dat, but I don't think it will help).
Title: foo_dsp_convolver
Post by: Sandrine on 2011-04-03 01:06:51
Pardon my ignorance, but what is that wisdom-thingie? I know about wisdom teeth, but that's about it.
Title: foo_dsp_convolver
Post by: lvqcl on 2011-04-03 01:33:07
If you don't want to use FFTW library, you don't need it. (FFTW library offers very fast FFT routines but using it may or may not be legal).

In other words, you probably don't need it.
Title: foo_dsp_convolver
Post by: Rollin on 2011-07-30 13:02:09
When foobar is in portable mode and impulses files located in foobar2000 directory, convolver version 0.3.8/0.4.0 gives error "Error during loading of impulse file: Object not found". It seems relative paths don't work. WinXP SP3, foobar2000 1.1.7. Impulses folder path "D:\foobar2000\ConvolverImpulses\De-Emphasis\"
Title: foo_dsp_convolver
Post by: lvqcl on 2011-07-30 14:08:33
Please post a screenshot with its settings.
Title: foo_dsp_convolver
Post by: Rollin on 2011-07-30 14:30:13
Please post a screenshot with its settings.

Convolver's settings?

(http://imageshack.us/photo/my-images/855/20110730172654.png/)

And convolver is the only active dsp.
Title: foo_dsp_convolver
Post by: lvqcl on 2011-07-30 16:13:06
Thanks for the report. I can reproduce this problem on WinXP but not on Win7.
I'll add a workaround for it.
Title: foo_dsp_convolver
Post by: sshd on 2012-07-14 00:41:02
This is truly a wonderful plugin as it allows me to use foobar2000 as an active crossover (along with foo_mm).

The official convolver cannot do this as it is limited to two channels only.

There is an alternative through foo_vst and ConvolverVST, but ConvolverVST can only have one configuration which is shared between all vst hosts. I use ConvolverVST with a minimum delay crossover for movies and youtube. foobar2000 on the other hand is using a very long filter with time domain correction, that causes major lip-sync problems in movies.

I do however have three suggestions for improvements:

1. Let user specify multiple FIR filters with different sample rates and detect the input sample rate. This will eliminate the need for a resampler in the DSP chain.

2. Support assymetric channel config (e.g. 2 in, 6 out) through the .cfg format rather than .wav. This will eliminate the need for a matrix mixer like foo_mm.

3. A checkbox to disable gapless mode. When comparing the effect of two filters with a keyboard shortcut, it is rather nice to be able to hear that it has switched.

Thanks again.
Title: foo_dsp_convolver
Post by: lvqcl on 2012-07-14 12:41:24
1) maybe, in some (distant?) future
2) unlikely, because this plugin is just a generic convolver, not up/downmixer or crossover filter.
3) ??? "gapless" means that it doesn't add extra samples at the beginning and the end of tracks (as opposed to foo_convolve).
Title: foo_dsp_convolver
Post by: sshd on 2012-07-14 22:52:47
2. You do not need a special convolver for a crossover. A generic will do just fine. I believe the .cfg file definition is for a generic convolver. It is widely supported by ConvolverVST, brutefir and more.
It is really quite simple. In comes stereo split into 2x3 - high, mid and low. These 2x3 channels goes through the 6 channel convolver and there you have a crossover. But it is not a problem as such, since the plugin works perfectly with foo_mm.
Title: foo_dsp_convolver
Post by: AndreaT on 2012-07-16 10:55:19
Hello SSHD, I see you mentioned foo_mm as sa good Xover.
Where can I download it?

I looked for it, but I could find it so far.

Many thanks
Regards, Andrea.
Title: foo_dsp_convolver
Post by: sshd on 2012-07-16 19:38:06
foo_mm is a Matrix Mixer you can use to convert 2 channels to 2x3 channels - not as crossover.
http://skipyrich.com/wiki/Index.php/Foobar2000:Matrix_Mixer (http://skipyrich.com/wiki/Index.php/Foobar2000:Matrix_Mixer)
Title: foo_dsp_convolver
Post by: AndreaT on 2012-07-20 17:59:35
Thank you SSHD, I misunderstood.
Regards, Andrea
Title: foo_dsp_convolver
Post by: romor on 2012-08-16 20:45:23
If I use any impulse with this component and then try to use foo_yac (http://www.hydrogenaudio.org/forums/index.php?showtopic=82745), it fails with:

Code: [Select]
Can't apply filter: .\filter\44\some_impulse.wav

With "official" convolver (by Peter or Garf, not sure) this issue is not present, so I'm reporting here
Title: foo_dsp_convolver
Post by: lvqcl on 2012-08-17 15:31:27
Ver. 0.4.6 should fix it.
Title: foo_dsp_convolver
Post by: lvqcl on 2013-02-10 12:04:17
0.4.7 - possible cause of crash fixed.
Title: foo_dsp_convolver
Post by: Rollin on 2015-08-15 19:27:31
How this plugin handles signals with samplerates more than 44100 kHz, when using 44100 kHz impulses? Does it autimatically resamples?
What maximum length of impulse file is supported?
Title: foo_dsp_convolver
Post by: lvqcl on 2015-08-15 19:54:02
1) No, it doesn't resample anything. So it's a good idea to add resampler into DSP list before this plugin.
2) about 4 millions of samples IIRC.
Title: Re: foo_dsp_convolver
Post by: lvqcl on 2018-11-05 20:54:52
Version 0.4.8 is available (see the 1st post).
Title: Re: foo_dsp_convolver
Post by: n A r on 2020-06-18 09:19:49
Thanks for the convolver plugin ...
As a request, could you think about adding the ability to automatically resample convolver impulse as seen by the audio file sample rate ? So we wouldn't need any resampler just above in the dsp chain ...
Best regards,

nAr
.
Title: Re: foo_dsp_convolver
Post by: dts350z on 2021-01-03 02:43:32
How does one route channels to and from the convolver.

For instance for Virtual Surround, each of the five audio channels (5.1  6 channel file) needs an IR for each ear, and all of them need to be mixed together for binaural 2 ch. output.

I would imagine there would be similar routing requirements for crossover type applications.

Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-01-03 12:43:42
How does one route channels to and from the convolver.

For instance for Virtual Surround, each of the five audio channels (5.1  6 channel file) needs an IR for each ear, and all of them need to be mixed together for binaural 2 ch. output.
If you have 6 channels signal, you need 6 channels impulse for convolver.
Convolver can't mix/route channels. Use Matrix Mixer (http://skipyrich.com/store/foo_dsp_mm.7z)
Title: Re: foo_dsp_convolver
Post by: kode54 on 2021-01-04 00:01:51
The convolver doesn't support crossmixing or anything like that. You can technically try to work around something like this, by using two instances of the Matrix Mixer:

1) Upmix with Matrix Mixer to twice as many channels, using two target channels for each source channel.
2) Convolve using a double channel count waveform.
3) Use another instance of Matrix Mixer to downmix the two sets of channels to stereo, mixing each of the impulses for each speaker together.
Title: Re: foo_dsp_convolver
Post by: dts350z on 2021-02-23 22:31:23
But I would need 32 channels, as I'm working with 16 channel virtualization.

Also, struggling to get matrix mixer installed. Where is the doc? It seems to be non standard.
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-23 22:09:36
Hi,
I am trying to use the plugin with a four channel impulse, build with one stereo impulse duplicated with Audacity in a 4 channel wave file, but in the end, after loading this in foobar, only the first and fourth output channels are working. the 2 middle ones are 'muted'.
any info to help me to solve this ?
thanks,
Laurent
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-24 05:14:42
I am trying to use the plugin with a four channel impulse, build with one stereo impulse duplicated with Audacity in a 4 channel wave file, but in the end, after loading this in foobar, only the first and fourth output channels are working. the 2 middle ones are 'muted'.
Does audio signal that you are trying to process with convolver has 4 channels too?
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-24 10:30:10
Hi,
Yes. my DSP processing chain is :
Resampling to 96khz
Foo_dsp_convolver,  with stereo impulse for phase control
Stereo to 4 channels
Foo_dsp_convolver,  with quad impulse for activ crossover

When i remove the second convolver, i have my 4 channels on my soundcard (Digiface) (L/R/L/R)
As soon as i insert it, i have only the 1st and the 4th activ.

Could it be linked to a 24/32bits conversion somewhere that i could have done wrong ? I would like to test with a 'blank' 4 channels impulse (like a passthrough), but how can i build it ?

thanks,

Laurent
Title: Re: foo_dsp_convolver
Post by: lvqcl on 2021-04-24 10:55:50
Upload your quad impulse somewhere, and I'll take a look.
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-24 11:13:15
I would like to test with a 'blank' 4 channels impulse (like a passthrough), but how can i build it ?
In you not have blank 4 channels impulse, how did you build your own 4-channels impulse at all? Blank impulse with samplerate 96 kHz in attachment.
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-24 16:36:31
Hi,
Thanks for your feedbacks. Following the idea of the blank impulse ( i never realized i could do this simply with Rephase), I played with various formats of blank impulses, simply at 44.1khz in order to simplify my processing chain :

Stereo blank impulse created by Rephase
With Audacity, I copy paste the impulse to create a quad impulse

And in foobar, my DSP chain is just
Stereo to 4 channels
Foo_dsp_convolver with various blank quad impulses

i played with the number of taps (from 8192 to 524288) , and the format (24bPCM to 32bfloat)

I succeeded to make this working with my four channels ... but to a certain limit of size and format of the pulse : After many many (...) trials, i realized that with big pulses, when i load the pulse into foo_dsp_convolver, sometimes, the Sample length is totally wrong. Please note that my goal is to use quite big impulses ( 131 000 taps or more).

I therefore came back to stereo, and compared stereo pulse loadings between convolver(gapless) and the original convolver. Conclusion is that with the original convolver, the number of samples is always good, whereas with convolver(gapless), sometimes the number is crazy ( like even 1 sample, 2 channels, 44.1kHz).

it looks to me there is a problem, or a limit somewhere in the pulse loading that is unclear to me ...

Any idea ?
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-24 17:06:57
whereas with convolver(gapless), sometimes the number is crazy ( like even 1 sample, 2 channels, 44.1kHz)
This convolver automatically detects excessive digital silence in impulse and ignores it.

As lvqcl already said: share your actual problematic impulses files.
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-24 22:12:02
this one is a big quad impulse which does not work properly : https://www.dropbox.com/t/pBFhgpw6WP9Rgp1n
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-24 22:23:00
Something gone wrong with this impulse Open it in Audacity and see yourself. Peak level in 2nd and 4th channels is -40 dB. So, yes, these channels are almost muted.
.

As for convolver, it works as expected.

EDIT: Sorry, they are not muted of course. I can't reproduce your problem. Using Convert stereo to 4 channels and then convolver with your impulse, no channels in output are muted.

https://youtu.be/xjy8jPuwxCw
Title: Re: foo_dsp_convolver
Post by: lvqcl on 2021-04-25 09:47:26
After many many (...) trials, i realized that with big pulses, when i load the pulse into foo_dsp_convolver, sometimes, the Sample length is totally wrong. Please note that my goal is to use quite big impulses ( 131 000 taps or more).

I therefore came back to stereo, and compared stereo pulse loadings between convolver(gapless) and the original convolver. Conclusion is that with the original convolver, the number of samples is always good, whereas with convolver(gapless), sometimes the number is crazy ( like even 1 sample, 2 channels, 44.1kHz).

it looks to me there is a problem, or a limit somewhere in the pulse loading that is unclear to me ...

Any idea ?

The impulse file that you uploaded has 524288 samples. To optimize performance, this plugin cuts too quiet samples from the beginning and the end of an impulse. That's why it shows "2917 samples" - that's all that was left after trimming.

Besides that, the plugin works as expected, no channels are muted.

BUT: the order of channels in foobar2000 is Front Left, Front Right, Back Left, Back Right. With your impulse, channels 2 and 4 (i.e. Front Right and Back Right) are lowpassed. Probably that's not what you want, so you need to swap channel 2 and channel 3 in your impulse file.
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-25 21:28:09
first of all, thanks lvqcl and Rollin for your time spent on my questions. I really appreciate.

So this convolver is not a straight convolver. It works 'on its own' on the input impulse, i did'nt know that. Does it also works on the input signal to adapt/simplify the convolution ? i Thought that the 'no delay convolution' was obtained by a clever buffer inside the dsp, but it seems not to be the case.

Do you also know the process used to simplify the impulse ? because i find it a little bit stange on the 2 blank pulses bellow. one in 24bit PCM, the other in 32bit PCM. Exactly the same file (from rephase) in audacity, but 2 ways of saving it. the first one, is read with 16k sample, what i would expect. the other one ... 1 sample .... stange no ?

However, if i go back to my initial question with my quad impulse file : it is also strange, because i clearly confirm that the quad impulse file i transferred give me a complete mute on channel 2 and 3. I am using foobar 1.6.5 on a w10 64b system.

>With your impulse, channels 2 and 4 (i.e. Front Right and Back Right) are lowpassed. Probably that's not what you want,

No, that's exactly what i want. Channel 2, is in fact Right low band, Channel 3 Left High Band, and CHannel 4 Left low band. that is how it is connected after on my multichannel DA.
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-26 16:33:06
because i find it a little bit stange on the 2 blank pulses bellow. one in 24bit PCM, the other in 32bit PCM. Exactly the same file (from rephase) in audacity, but 2 ways of saving it. the first one, is read with 16k sample, what i would expect. the other one ... 1 sample .... stange no ?
They are not the same. 24 bit file has noise. You cannot see it in Audacity with default settings but it is there. Samples with noise are not silent samples, so they aren't trimmed. Also, phase in 32 bit file is inverted, but this is irrelevant in this case. See spectrograms for noise.
24 bit file:


32 bit file:

If in Audacity you will set Range for spectrograms to 180 dB, this noise will be visible too.

However, if i go back to my initial question with my quad impulse file : it is also strange, because i clearly confirm that the quad impulse file i transferred give me a complete mute on channel 2 and 3. I am using foobar 1.6.5 on a w10 64b system.
What happens if you use only two DSPs - Convert stereo to 4 channels and Convolver with your quad impulse? What happens if you use only one DSP - Convert stereo to 4 channels?
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-28 21:50:05
/quote]What happens if you use only two DSPs - Convert stereo to 4 channels and Convolver with your quad impulse? What happens if you use only one DSP - Convert stereo to 4 channels?
Hi,
With only stereo to 4, i have all my 4 channels. and with the addition of dsp convolver with this particular filter, channel 2 and 3 are muted. But i build another quad filter, and this last one works well, with 4 channels ok. So there is something wrong with my first quad impulse, but what ?

Thanks also for your analysis of the 2 Audacity recording : conversion to 24bPCM is surprisingly creating low backgroung noise ... I will avoid this conversion and stay in 32bit float.

Tonight, i tested carefully the audio quality, with a stereo impulse (phase shift compensation), btw standard convolver, and dsp_convolver, and the advantage is clear for standard convolver. Is it normal if both convolver work from the same impulse ? how do you explain this ?

thanks,
Title: Re: foo_dsp_convolver
Post by: Rollin on 2021-04-29 06:29:53
Precision of processing is higher than human perception in both convolvers. But standard convolver has some limitation. So, most probably, standard covolver does not what your think it does in this case.
Show your DSP chains and settings of both convolvers, and share impulse. So i can tell you what causes differences.
Title: Re: foo_dsp_convolver
Post by: aquascop on 2021-04-30 19:00:59
[quote
Tonight, i tested carefully the audio quality, with a stereo impulse (phase shift compensation), btw standard convolver, and dsp_convolver, and the advantage is clear for standard convolver. Is it normal if both convolver work from the same impulse ? how do you explain this ?

Sorry for this, there was a gain bias btw the two settings, so the difference in quality is finally not so clear ! i need to take time to listen and compare. There is definitely a difference btw the 2 processes. so i added a VST altenativ with convolverVST to compare and also measure the resulting impulse and phase correction. I'll report the results.

thanks for reading
Title: Re: foo_dsp_convolver
Post by: Bogozo on 2022-10-14 00:51:17
Can someone recompile it for foobar2000 v2 and 64 bit?
Title: Re: foo_dsp_convolver
Post by: sveakul on 2022-10-14 04:50:02
Can someone recompile it for foobar2000 v2 and 64 bit?
using this version from Case right now:
https://foobar.hyv.fi/2.0/?view=foo_dsp_stereoconv (https://foobar.hyv.fi/2.0/?view=foo_dsp_stereoconv)
Title: Re: foo_dsp_convolver
Post by: Brand on 2022-10-21 22:14:13
Can someone recompile it for foobar2000 v2 and 64 bit?
+1, I would like this too. The other one is usable, but still.
Title: Re: foo_dsp_convolver
Post by: sshd on 2022-12-28 16:14:40
+1, I would really appreciate a 64-bit version.
I cannot use the stereo convolved as I need 8 channels.
Title: Re: foo_dsp_convolver
Post by: Brand on 2022-12-30 00:03:38
Just as an FYI: Foobar has a very nice VST host component (https://www.foobar2000.org/components/view/foo_dsp_vst3).
So it's possible to use convolution VST effects, including free ones like MConvolutionEZ (https://www.meldaproduction.com/MConvolutionEZ) or Freeverb (https://freeverb3vst.osdn.jp/).

I used the convolver in Foobar for headphone correction, but I then switched to using Equalizer APO and I like it better this way.