An Audio Compressor / Limiter

I posted an audio compressor / limiter written in Haskell to HackageDB and BartForge this weekend. I also posted its ancillary pure-Haskell WAVE file IO library, and my Haskell argument parsing library.

It all still needs a lot of work to be good, but it's usable now. Enjoy. Friend of Bart

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

How

about posting some audio files to demonstrate your software? I'm not at all sure how to build it on my computer - or even what the general intent of the program is.

Good point

You'll need a Haskell compiler to do anything with this stuff. I don't know what the state of Mac Haskell actually is.

The program implements a hard limiter, currently, with kind of a funny curve. I should generalize it a bit at some point. You stuff a WAVE file in, and out comes a WAVE file with its dynamic range modified according to the limiter parameters.

I can post some audio files, but the effect is subtle. I'm building a delay line this evening. I'll finish that up and post samples from it soon instead.

Nyquist

There's a LISP variant called Nyquist which is the audio effects programming language for Audacity. The only obvious advantage I can see for Nyquist is that literally tens of thousands of people will try your effects if they can be plugged right in to Audacity.

The currently available crop of Audacity effects is not that great, so you have an opportunity to really make a difference.

None of that matters if you're just flexing your Haskell muscles in a pleasant way.

Audacity plugin

Audacity is starting to drive me nuts, actually. It seems to be constantly not quite working right, at least under Linux; I've been fighting with its input level control, which doesn't seem to work at all right now, this evening. That said, you're right that it is pretty universal and cross-platform.

My vague plan at this point is to maybe build a NetPBM-like toolkit for offline audio processing. It would essentially be a SoX replacement/symbiote. The key difference is that you would construct pipelines of simple programs instead of trying to figure out the Martian command-line arguments of SoX. In particular, one would continue to rely on SoX for conversions to and from WAV files, which is the only format I intend to support.

Somebody seems to have recently created a way to build LADSPA plugins in Haskell. This would let me turn my code into Audacity plugins—Audacity supports LADSPA plugins on Mac and Windows as well as Linux. Maybe I'll give that a try if I get some time. Thanks for the idea! Friend of Bart

Post new comment

CAPTCHA
This question is for testing whether you are a human visitor to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.
Syndicate content