Windows users can now use VLevel in the form of a plugin for the popular Foobar2000 music player. I'd like to thank wore for getting the ball rolling and ssamadhi97 for writing a configuration GUI. To use the plugin, put foo_dsp_vlevel.dll in C:\Program Files\Foobar2000\components, run Foobar2000, and under Preferences... DSP Manager, add VLevel to the chain.
There's also a beta WinAmp plugin, which at this point has no GUI. (Help would be appreciated.) Unfortunately, WinAmp's plugin interface isn't as flexible as Foobar2000's, so the plugin will cause a delay in playback.... read more
VLevel 0.5 has been released. VLevel is a program that adjusts the volume of your music so it doesn't startle you. In this release, the LADSPA plugin has improved and the command line filter has become faster.
The LADSPA plugin used to be mono only, and some hosts don't compensate for this by running two instances. It has been redesigned, and now works for both mono and stereo. Also, I discovered the performance problems of the command-line filter were due to GCC 3.2's horribly slow iostream implementation, so I've modified vlevel-bin to use faster C-style input and output.... read more
VLevel 0.5, which should be available soon, will have improved IO performance and slightly faster math.
The performance problems with GCC 3.2 were caused by its slow iostream implementation, not floating point problems as I first thought. (Thanks, cachegrind!) I'm changing vlevel-bin to use FILE pointers instead of iostreams, which are much faster on my system.
The other slight improvement is because of a change in the internal data representation. 0.4 interleaves the channels, like a .wav file. 0.5 keeps each channel separate. Even when operating on raw data, separating and re-combining the channels is faster than complex array indexing. This also paves the way for more efficient and correct stereo with LADSPA.
VLevel 0.4 has been released. The big change is the LADSPA plugin. VLevel should work on most LADSPA hosts; it's been tested on XMMS LADSPA and Demolition. There is a delay when playing, but I don't see a way around this.
I'm now working on making a website for VLevel, though I don't have much experience. I also hope to add persistance to the XMMS LADSPA plugin, so I don't have to load VLevel each time I run XMMS.
I now have the LADSPA plugin written, which means VLevel can now be used as a plugin in XMMS or any other LADSPA host. The code is in CVS, and VLevel v0.4 will be out as soon as I do more extensive testing.
See http://www.ecs.soton.ac.uk/~njl98r/code/ladspa/ for the XMMS LADSPA host plugin.
The only major annoyance, which I attribute to design limitations in both LADSPA's and XMMS's plugin interfaces, is the annoying delay. Since neither interface allows a plugin to report how much data is useful or flush its buffer, it's impossible to have a plugin buffer data transparently.... read more
I was originally going to write an XMMS plugin and a front-end, but for now, the next step is a LADSPA plugin, which will allow VLevel to be used in XMMS, some command line tools, some audio editors, and any other LADSPA host.
The plugin API looks workable, although I'm worried that seperate instances for seperate channels may not be the best solution. Oh, well. I like that LADSPA uses floats, however.
This release adds command line options (so it's now fully functional), more documentation and notes, and some minor changes to the algorithm and build process.
The next release will include a script that will use sox, oggdec/oggenc, flac, etc. to make it easy to convert files, instead of just filtering raw data.
The XMMS plugin looks possible, though there may be some issues with buffer flushing. I'll have to try it.
I added command-line argument processing, based my cool class that lets you extract arguments in a generic and C++ish way. No new release for a few days, but the changes are in CVS.
I'm thinking about changing vlevel to vlevel-bin and main.cpp to vlevel-bin.cpp to make room for a ruby script.