Assignment 3, CSC344, Winter 2014
The goal of this project is to create a simple filter, including one or more dynamically controllable components.
This should be built as a VST or AU plugin. If you have a different deployment target in mind, check with me to make sure it’s okay.
What kind of filter should you implement?
As before, I’d like you to be creative. Once again, though, let me establish a baseline. A "minimum acceptable" filter would be a low-pass filter with a resonant peak at the cutoff frequency, where the cutoff is controllable by a slider or a VST/AU parameter.
I would love to hear some more dramatic forms of filtering; distortion would be great, lots of parameters would be great, maybe some strange unstable stuff.
1 How to build a low-pass filter with adjustable cutoff
The math on this assignment is definitely heavier than on earlier ones. Let me suggest some iterative development steps in getting this to work, at least for the low-pass filter I suggest as a baseline target.
Get a filter compiling in JUCE that does absolutely nothing to the sound. I realize that this itself may be a challenge, and I feel your pain; the intransigence of some of these build tools is astonishing.
Set up a delay buffer of length two. Fill it with *input* samples as they arrive.
use the present and past inputs to generate a simple one-frequency notch filter using the X (t) - 2 cos (theta) X (t-1) + X (t-2) formula we discussed on Wednesday. Make sure it actually filters out the specified frequency.
Make your filter a feedback one; this will involve storing past *outputs* in the delay buffer, then changing the coefficients. I suggest putting two poles relatively close to the unit circle (say, at distance 0.8 from the origin).
Use an online filter design tool to generate coefficients for a lowpass filter with a fixed cutoff. Use these coefficients, and make sure that the filter behaves as expected.
Use wikipedia/my sample code/someone else’s sample code to write code that maps filter parameters (cutoff frequency, ripple, etc.) to coefficients.
Profit!
2 Deliverables
As before, you should make all of your code available on your github repo.
As with the former two assignments, you should also submit a 30-second sample of music that is filtered using your filter, as you dynamically control it. Your source music can be anything you like, but you may get better results from things that are relatively "dry"–so, for instance, a track generated by some MIDI piped into your existing softsynth, or some recorded voice, or... well, really anything would be fine. Keep in mind that we do want to be able to hear the impact of *your* filter.