ReEQ and ReSpectrum:
Thought I'd share this with you. It's a couple of pet projects I've been working on for fun recently.
My question was: is it possible to create a FabFilter or EQ8 style high quality filter in JSFX?
ReEQ
This is an eight band filter. It defaults to oversample x2 so that the filter shapes are preserved near Nyquist but no oversampling is also an option. When oversampling, there is a 16 sample delay introduced and it uses a steep FIR filter at high frequencies to remove aliasing. It's highly transparent in either case.
The filter code itself is based on Andy Simper's (Cytomic) SVF filter algorithms. They are far higher quality than the usual RBJ cookbook filters. These are the same zero delay filters used in Ableton's EQ8 which is well regarded for its high quality.
In addition, I've provided 6db slope filters and increments of 6db thereof (a combination of one and two pole filters) with cutoff slopes for high and low of up to 96dB. I've also provided Butterworth filters for steeper (but more resonant) slopes.
Full mid/size or left/right stereo filter bands are implemented.
Feature wise I see it as an improvement over ReaEQ (more filter types and slopes, mid/side or left/right processing).
Features
- The spectrum display type has a gradual decay effect (as used by many other commercial EQs). I find this much more useful for musical applications.
- The 'Settings' menu at the top allows various spectrum display settings to be adjusted. That's which spectrum to show (mid/side/left/right etc), whether to fill the spectrum or use lines, the ceiling and floor range, the tilt of the spectrum (it tilts around 1k freq), window type, window size and whether to show the spectrum as it was before the EQ affected it.
- The buttons at the bottom are: Oversample mode, mid/side or left/right mode, the scale of the filter bands, total gain, mid/left gain, side/right gain. The numeric values are altered by clicking on the button and dragging the mouse up or down.
- Double clicking in space creates a filter band node. Depending where the mouse x is on the spectrum you'll either create a high pass, low shelf, peak, high shelf or low pass filter.
- Click on the filter band node and move mouse to alter it's frequency and dB.
- Alt Double click deletes a node.
- Double clicking on a filter band node will toggle enable/disable.
- Hovering over a node and using the mouse wheel will adjust the filters Q value.
- Command (Mac) or Ctrl (Windows) and mouse wheel hovering over a slope filter will adjust the slope dB.
- Right click over a filter band node will bring up a menu. Options are: Disable/Enable, Select shape of filter, dB of slope (only for high/low pass filters), Stereo placement (mid/side, left/right), Split node which will split the node into mid/side or left/right and delete.
- When a filter node is in mid/side or left/right mode, some triangles are displayed around the node to give an indication of such.
- Clicking on the top-right yellow EQ db number will show a menu allowing to select the EQ range from 6dB - 36dB.
- The info box at the bottom left will show useful information such as the frequency of the mouse position or node (if hovering over one), the music note and cents, dB of mouse or filter, filter Q and filter slopes.
- The drawn view scales to fit the full window and when the mouse isn't hovering over the window the programs turns off distracting menus and node handles.
- Holding the left shift key down puts the EQ into listen mode. You'll see two boundary bars representing the bandwidth being listened to. Use the mouse wheel to shrink/grow the area. It uses a band pass to isolate frequencies. (Thanks to Reaperto for reminding me!)
ReSpectrum
- The same 'Settings' options as ReEQ.
- 'keys' button toggles a piano roll. Hover over the piano keys to see a vertical beam to pinpoint spectrum frequencies.
- 'peaks' button toggles the spectrum display of maximum peaks.
Caveats
- I've only tried it on OSX as I develop on Mac.
- It should support both retina and non-retina displays.
- Only the first five filter bands are exposed as sliders for automation.
- You'll need a reasonable machine performance wise. Closing the window when not in use helps.
- I've used showmenu() for the menus. Technically it's not documented for JSFX so I don't know how well it works on other platforms.
- Oh, I should say I borrowed Theo Niessink's RBJ filter code but only for the display magnitude calculations, not for sound processing.
I've attached a zip file which can be unzipped to your Reaper effects directory. I'd consider using ReaPack if there was a call for it.
Updates
* Implemented floating info panel modified from tvm79's mods. Engaging listen mode will give you a floating info panel without having to select a band node
* Band nodes have improved selected and dragging visual.
* Mid/Side, Left/Right now have polarity toggles
* There's a toggle for a crude hard brick limiter. It's here as a safety net.
* Added 'None' option for spectrum display.
* Filters in SVF now cascade using nested conditions (optimization)
* Double click on bottom numeric buttons reset values to default
* Double click at bottom margin no longer creates filter bands
* Minor font fixes - still some to do.
* Fixed oversampling issue. Oversampling correctly ignored for sample rates > 48kHz.