IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
foo_dsp_splineeq, Professional-quality equalizer for foobar2000
pro_optimizer
post Nov 29 2010, 09:38
Post #1





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



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. smile.gif

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

This post has been edited by pro_optimizer: May 29 2011, 09:42
Go to the top of the page
+Quote Post
Rozzo
post Nov 29 2010, 11:05
Post #2





Group: Members
Posts: 127
Joined: 28-March 06
Member No.: 28928



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
Go to the top of the page
+Quote Post
odyssey
post Nov 29 2010, 12:51
Post #3





Group: Members
Posts: 2296
Joined: 18-May 03
From: Denmark
Member No.: 6695



Wow, a 166MB dependency?

Anyway, I get the same error:

CODE
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
Go to the top of the page
+Quote Post
pro_optimizer
post Nov 29 2010, 13:26
Post #4





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



QUOTE (odyssey @ Nov 29 2010, 13:51) *
Wow, a 166MB dependency?

Anyway, I get the same error:

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

This post has been edited by pro_optimizer: Nov 29 2010, 13:29
Go to the top of the page
+Quote Post
Canar
post Nov 29 2010, 16:29
Post #5





Group: Super Moderator
Posts: 3373
Joined: 26-July 02
From: To:
Member No.: 2796



QUOTE (pro_optimizer @ Nov 29 2010, 00:38) *
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.

This post has been edited by Canar: Nov 29 2010, 16:29


--------------------
You cannot ABX the rustling of jimmies.
No mouse? No problem.
Go to the top of the page
+Quote Post
pro_optimizer
post Nov 29 2010, 17:00
Post #6





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



QUOTE (Canar @ Nov 29 2010, 17:29) *
QUOTE (pro_optimizer @ Nov 29 2010, 00:38) *
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.
Go to the top of the page
+Quote Post
pro_optimizer
post Nov 30 2010, 10:05
Post #7





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



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).
Go to the top of the page
+Quote Post
pro_optimizer
post Dec 2 2010, 13:20
Post #8





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



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).
Go to the top of the page
+Quote Post
odyssey
post Dec 2 2010, 14:21
Post #9





Group: Members
Posts: 2296
Joined: 18-May 03
From: Denmark
Member No.: 6695



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
Go to the top of the page
+Quote Post
kode54
post Dec 2 2010, 14:40
Post #10





Group: Admin
Posts: 4694
Joined: 15-December 02
Member No.: 4082



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.
Go to the top of the page
+Quote Post
lumanzhao
post Dec 3 2010, 19:44
Post #11





Group: Members
Posts: 2
Joined: 20-September 09
Member No.: 73334



I just want to say the plugin is so f*cking cool!
Go to the top of the page
+Quote Post
pro_optimizer
post Dec 3 2010, 23:16
Post #12





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



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).
Go to the top of the page
+Quote Post
odyssey
post Dec 4 2010, 02:38
Post #13





Group: Members
Posts: 2296
Joined: 18-May 03
From: Denmark
Member No.: 6695



Cool cool.gif 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 wink.gif (to create EQ's per audio-file). (Edit: Or a way to store an EQ curve in a tag)

This post has been edited by odyssey: Dec 4 2010, 02:55


--------------------
Can't wait for a HD-AAC encoder :P
Go to the top of the page
+Quote Post
mudlord
post Dec 4 2010, 10:23
Post #14





Group: Developer (Donating)
Posts: 818
Joined: 1-December 07
Member No.: 49165



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)?
Go to the top of the page
+Quote Post
pro_optimizer
post Dec 4 2010, 12:29
Post #15





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



QUOTE (odyssey @ Dec 4 2010, 03:38) *
1. Presets within the EQ

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

QUOTE (mudlord @ Dec 4 2010, 11:23) *
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.
Go to the top of the page
+Quote Post
Yegor
post Dec 12 2010, 07:16
Post #16





Group: Developer
Posts: 253
Joined: 8-April 09
From: Russia, Zlatoust
Member No.: 68779



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 smile.gif
Go to the top of the page
+Quote Post
pro_optimizer
post Dec 14 2010, 09:53
Post #17





Group: Developer
Posts: 99
Joined: 6-June 06
Member No.: 31515



QUOTE (Entrase @ Dec 12 2010, 08: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 smile.gif


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! smile.gif
Go to the top of the page
+Quote Post
Chesteta
post Dec 24 2010, 18:09
Post #18





Group: Members
Posts: 19
Joined: 24-December 10
Member No.: 86759



I have not downloaded... yet smile.gif 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 biggrin.gif

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 smile.gif just a thought, I have never seen such functionality before though that doesn't mean it doesn't exist

This post has been edited by Chesteta: Dec 24 2010, 18:15
Go to the top of the page
+Quote Post
Chesteta
post Jan 12 2011, 00:44
Post #19





Group: Members
Posts: 19
Joined: 24-December 10
Member No.: 86759



will matlab 7.3 runtime work also?
Go to the top of the page
+Quote Post
odyssey
post Mar 1 2011, 13:57
Post #20





Group: Members
Posts: 2296
Joined: 18-May 03
From: Denmark
Member No.: 6695



pro_optimizer: Can you make the x-axis human-readable? smile.gif 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.

This post has been edited by odyssey: Mar 1 2011, 13:57


--------------------
Can't wait for a HD-AAC encoder :P
Go to the top of the page
+Quote Post
markanini
post Nov 10 2011, 00:49
Post #21





Group: Members
Posts: 555
Joined: 22-December 03
From: Malmö, Sweden
Member No.: 10615



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 :/
Go to the top of the page
+Quote Post
kode54
post Nov 10 2011, 02:24
Post #22





Group: Admin
Posts: 4694
Joined: 15-December 02
Member No.: 4082



It's not as flexible, but you may consider trying foo_dsp_xgeq 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.)
Go to the top of the page
+Quote Post
markanini
post Nov 10 2011, 02:41
Post #23





Group: Members
Posts: 555
Joined: 22-December 03
From: Malmö, Sweden
Member No.: 10615



Thanks, Kode54. I was actually interested in pro_optimizer's Headphone re-mapper but posted here since it's a more recent thread.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 28th December 2014 - 16:21