Skip to main content
Topic: foo_dsp_convolver (Read 22066 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.


Here's another convolver plugin: foo_dsp_convolver.

Official plugin (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.

- 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).

Old versions are available here


Reply #1
Just out of curiosity, I noticed 3 different FFT methods in the source...

May I ask why thats so?  Speed testing?


Reply #2
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.


Reply #3
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?


Reply #4
iirc, FB2K uses modded versions of KISSFFT for FFT processing.


Reply #5
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;


Reply #6
[font= "Courier New"]virtual void visualisation_stream_v3::chunk_to_spectrum(audio_chunk const & chunk, audio_chunk & spectrum, double centerOffset) = 0;[/font]
Full-quoting makes you scroll past the same junk over and over.


Reply #7
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))?


Reply #8
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.
Full-quoting makes you scroll past the same junk over and over.


Reply #9
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.


Reply #10
Thanks for the report. Try ver. 0.3.5.

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?


Reply #11
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.


Reply #12
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? 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 (probably not surprising)

Thank you for your time



Reply #13
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.


Reply #14
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)


Reply #15
0.3.6 on foobar 1.1.2b2:

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

0.3.5 was working fine


Reply #16
Works here perfectly. fb2k v1.1.2 beta 2, windows7 x64.

Pls tell me details about this problem.


Reply #17
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

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!"


Reply #18
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.


Reply #19
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


Reply #20
If your CPU is Core2 or at least has SSE2 support you can also try fftw-wisdom from this archive


Reply #21
will the generated wisdom file be any different from the one generated from the other archive? (more optimized)


Reply #22
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.


Reply #24
what about fftw-wisdom_24.dat?

SimplePortal 1.0.0 RC1 © 2008-2019