Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_dsp_splineeq (Read 14043 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_dsp_splineeq

The Spline Equalizer is a new plugin for foobar2000 0.9.6 and later, currently in alpha stage. It was prototyped using MATLAB (unfortunately I'm lacking time for painstaking C++ GUI and DSP programming at this time), so it may not run on every Windows version. If you encounter a crash, please post your crash dump and OS version. 

The plugin is a professional-quality equalizer that gives you arbitrarily fine control over the equalization and, perhaps most importantly, does not have the problems of fb2k's built-in one (see my old thread on that topic a few years back). The main inspiration was the popular commercial Voxengo CurveEQ VST. Processing is done in 64bit for the audiophiles.

Installation
  • Download and install the MATLAB compiler runtime 7.13. This package is free to redistribute (see here), but the download is 166MB.
  • Restart your computer
  • If you do not have it already, download and install Microsoft's compiler runtime 9.0, as well.
  • Download the plugin foo_dsp_splineeq, and copy the file foo_dsp_splineeq.dll into foobar2000's components directory, and the file splinecore.dll directly into foobar2000's root directory. If you have foobar2000 1.1 or newer, you can also open the Preferences (Ctrl+P), go to the Components list, drag the zip file onto it and click Apply.

Usage

You can add (or remove) control points by double-clicking into the plot, and you can toggle whether a control point is freely movable by right-clicking it (otherwise it can only be moved up/down). For a few other ways to do editing, take a look at the help. The plugin allows you to save/load its own presets, which is handy if you're working a lot with it (also, these presets save the graph editing history, so you can undo things when you get back to it). The EQ supports both linear-phase equalization and minimum-phase equalization (the latter is probably better to fix problems with the loudspeakers/headphones, whereas the former is better to fix problems with the music itself). You can also export the final filter as a .wav file for use with foo_convolve or other tools.



Notes

To get instant response when you move control points, make sure that the buffering in fb2k's output module is set to a low value (e.g. a few 100ms). When the UI is loaded for the first time (after boot), it takes quite a long time (as all the MATLAB machinery is loaded in the background). When you open it again later, it should be more snappy. The source code is available here.

Known issues
Do not edit the equalizer settings while you are also transcoding files using this DSP in the background - or the transcoded files will reflect your live edits. Also, do not close the preset manager window in the background while you're editing (or your changes will not be saved by fb2k).

foo_dsp_splineeq

Reply #1
Windows Seven

Foobar2000 1.1

"Could not load foo-dsp-splineq.dll, this plugin was done for a different version of Foobar2000 or it lacks a required dependency"

Installed foo-dsp-splineq in components directory, the other file in foobar root dir. Installed also the Matlab thing.

Ys
Rozzo

foo_dsp_splineeq

Reply #2
Wow, a 166MB dependency?

Anyway, I get the same error:

Code: [Select]
Failed to load DLL: foo_dsp_splineeq.dll
Reason: This component is missing a required dependency, or was made for different version of foobar2000.
Can't wait for a HD-AAC encoder :P

foo_dsp_splineeq

Reply #3
Wow, a 166MB dependency?

Anyway, I get the same error:

Code: [Select]
Failed to load DLL: foo_dsp_splineeq.dll
Reason: This component is missing a required dependency, or was made for different version of foobar2000.


Looks like I need to test this on a fresh system to hunt down that dependency (all systems in my reach have Visual Studio installed, among others). My first guess is that it is the VC++ redistributable: msvcr90.dll, msvcr80.dll and msvcp80.dll - these should be available both individually from the internet, or maybe better, in a vcredist_x86 package by Microsoft. Please try getting those.

Edit: I think the links are this one and that one.

foo_dsp_splineeq

Reply #4
Known issues
Do not edit the equalizer settings while you are also transcoding files using this DSP in the background - or the transcoded files will reflect your live edits. Also, do not close the preset manager window in the background while you're editing (or your changes will not be saved by fb2k).
Given this restriction, I am assuming then that you are not using foobar2000's save/load code and so you cannot reconfigure this component using DSP presets. Am I correct?

If so, this is not a very good design decision, and I hope you have plans to fix it.

foo_dsp_splineeq

Reply #5
Known issues
Do not edit the equalizer settings while you are also transcoding files using this DSP in the background - or the transcoded files will reflect your live edits. Also, do not close the preset manager window in the background while you're editing (or your changes will not be saved by fb2k).
Given this restriction, I am assuming then that you are not using foobar2000's save/load code and so you cannot reconfigure this component using DSP presets. Am I correct?

If so, this is not a very good design decision, and I hope you have plans to fix it.


Actually, the regular preset save/load mechanism is supported; these are two unrelated issues (the config dialog is not modal, and the regular dsp preset change callback does not lead to instant updates while editing, for some reason) that need to be fixed in a future version.

foo_dsp_splineeq

Reply #6
OK, the trick seems to be to install the Matlab runtime, RESTART, and only then try to run foobar2000 (otherwise the runtime dll is not yet in the path).

foo_dsp_splineeq

Reply #7
So I finally got a change to test it on a pristine system. The correct setup instructions are as follows:

  • Download and install the MATLAB compiler runtime 7.13 - you can use the link in the first post or any other place on the 'net, as this package is free to redistribute; the download is 166MB, so I had to upload it here, on a cheesy file hosting site - note that the first big download button is an advertisement...
  • Restart your computer
  • If you do not have it already, download and install Microsoft's compiler runtime 9.0, as well.
  • Now finally download the plugin foo_dsp_splineeq, and copy the file foo_dsp_splineeq.dll into foobar2000's components directory, and the file splinecore.dll directly into foobar2000's root directory.

Let me know if it works for you. I am considering to release future plugins using the same platform, as it is very convenient (took me 10 hours on thanksgiving).

foo_dsp_splineeq

Reply #8
Works great after a restart.

It's a little hard for me to read what the x-axis means in freq. Can you put correct freq-labels on it?
Can't wait for a HD-AAC encoder :P

foo_dsp_splineeq

Reply #9
It is possible to drop the splinecore.dll dependency into the components directory if you're using foobar2000 v1.1 or newer. Or you may even install the component and its dependency to your user profile directory using the built-in installer, by opening the Preferences dialog to the Components page (the default when first viewing the Preferences dialog after player startup) and either dropping a component ZIP file onto the page, or clicking the Install... button and locating the archive with the resulting file selector dialog.

foo_dsp_splineeq

Reply #10
I just want to say the plugin is so f*cking cool!

foo_dsp_splineeq

Reply #11
Thanks for the feedback! I will add better freq labels on the axis - let's see if more things are trickling in over the next few days.

kode54, thanks for the tip (still getting used to the 2010-era fb2k).

foo_dsp_splineeq

Reply #12
Cool  thanks!

I have a distant proposal - Not sure how many here would agree on, but anyway...

1. Presets within the EQ
2. Automatic tag-controlled preset-switching  (to create EQ's per audio-file). (Edit: Or a way to store an EQ curve in a tag)
Can't wait for a HD-AAC encoder :P

foo_dsp_splineeq

Reply #13
Quote
Processing is done in 64bit for the audiophiles.


...why? What measurable difference does it make at all when FB2K's pipeline is pure 32-bit float?

I take it the MATLAB runtime is going to stay for all your other plugins too (when you can do all your stuff in GDI+ and C++ sufficiently)?

foo_dsp_splineeq

Reply #14
1. Presets within the EQ

I think what you mean is already implemented (see toolbar in the config dialog).

I take it the MATLAB runtime is going to stay for all your other plugins too (when you can do all your stuff in GDI+ and C++ sufficiently)?

Not quite - only for those that are tough (or impossible) for me to pull off otherwise in my limited time. Other things will be done in C++ as before (I hate big dependencies as much as anyone else). By the way, if someone re-did this in C++ (open source), I wouldn't be offended - on the contrary. Concerning the 64bit question: technically, as there is a quite big convolution going on, the possibility for errors to accumulate during that is considerably higher than between or within simple DSPs. Practically, I am pretty sure that it doesn't matter (but didn't do the math, so wouldn't bet any money). Now, there are people who care about such numbers (and about whether their mp3's are 320 or 280kbps...), so it would be sad if they stayed away from the DSP because of doubts in the quality.

foo_dsp_splineeq

Reply #15
Quote
Do not edit the equalizer settings while you are also transcoding files using this DSP in the background - or the transcoded files will reflect your live edits. Also, do not close the preset manager window in the background while you're editing (or your changes will not be saved by fb2k).
Quote
the config dialog is not modal, and the regular dsp preset change callback does not lead to instant updates while editing, for some reason
I've downloaded the source code and gave a few minutes to read it. Well, if there is a problem with dsp_preset_edit_callback that fb2k provides you (which is quite strange) then you may re-invent it in your own class. If you also make all dsp_presets unique then you can use them for instance identification purposes. I solved a few related problems developing my VST adapter. If you'd like to ask something about it then feel free to

foo_dsp_splineeq

Reply #16
I've downloaded the source code and gave a few minutes to read it. Well, if there is a problem with dsp_preset_edit_callback that fb2k provides you (which is quite strange) then you may re-invent it in your own class. If you also make all dsp_presets unique then you can use them for instance identification purposes. I solved a few related problems developing my VST adapter. If you'd like to ask something about it then feel free to


Ah, that's a nice idea! I think that the problem has something to do with my unconventional message loop, so I'll first try to do it the "right way", and fall back to your proposal if that doesn't work. By the way: Keep up the good work with your plugins!

foo_dsp_splineeq

Reply #17
I have not downloaded... yet  I am incredibly interested though, very cool stuff!

1)Is this plugin akin to Audacity's Equalizer (a fft based equalizer)?

2)If it is a fft eq (which is my presumption), what is the maximum window size that can be applied?

3)Is there a quick (easy) way to load sets of points (frequency/gain values) into the Eq?  If I could load ~1000-2000 Comma Seperated Values of frequency and gain that would be incredible

Overall, I am very impressed thus far, EXCELLENT work.

EDIT/addition: Lastly, if there was a way to arbitrarily change the Phase along with the frequency, for example a separate curve that would represent the phase response which could be changed with splines... that would be awesome  just a thought, I have never seen such functionality before though that doesn't mean it doesn't exist

foo_dsp_splineeq

Reply #18
will matlab 7.3 runtime work also?

foo_dsp_splineeq

Reply #19
pro_optimizer: Can you make the x-axis human-readable?  I don't really know what to do with the 101, 102, 103 and 104... Also I'm wondering about the uneven space between vertical lines - Isn't that logarithmic scale? Then why does it say "Linear phase" in the dropdown?

Btw, the matlab runtime link is dead.
Can't wait for a HD-AAC encoder :P

foo_dsp_splineeq

Reply #20
I get this error when trying to install MCR:
"The files for installation requirement VCREDIST could not be found."
Found the x64 version for my OS and got the same results :/

foo_dsp_splineeq

Reply #21
It's not as flexible, but you may consider trying [a href='index.php?showtopic=88505']foo_dsp_xgeq[/a] as it's also a high quality equalizer DSP. It may not have the whole spline thing going for it, but it doesn't require that gigantic Matlab compiler runtime, either. (And you can try requesting a spline configurable mode in the topic there, assuming that xnor's equalizer code is conducive to parametric equalization like that.)

 

foo_dsp_splineeq

Reply #22
Thanks, Kode54. I was actually interested in pro_optimizer's Headphone re-mapper but posted here since it's a more recent thread.