Welcome

Welcome to Teragon Audio, provider of audio plugins, utilities, and guides for those looking to develop their own audio software. This is the development blog, if you are looking for the official website please visit http://www.teragonaudio.com.
Showing posts with label hilofilter. Show all posts
Showing posts with label hilofilter. Show all posts

Filter tweaking

Spent some time tweaking filter curves for HiLoFilter, using the same polynomial interpolation trick I wrote about previously. Grapher is such a neat tool, but unfortunately it's soooo buggy. Oh well, once I get the formulas right, I won't need it anymore.

HiLoFilter is much more usable now, the curves are more performance oriented and give a bit more wiggle room where it matters. That is to say, on the high-pass filter, the curve lets the user select the lower frequency more precisely (and vise-versa). In the process, I've also reduced some of the clicking that HiLoFilter produces when shifting filter state, but unfortunately it's not completely eliminated. I'll need a lot more debugging time to figure out exactly why that is happening, because it's definitely there but not much harder to reproduce.

Death to boilerplate

I made some good progress on ExtraNotes yesterday, it can now save the note correctly and serialize the image data to a base64-encoded string. It's pretty much ready to be released, but when I was testing it I realized what a pain in the ass it's going to be to make it compatible with all hosts. Text input in VSTs is always somewhat tricky, since many hosts like to intercept the keystrokes for themselves. Anyways, I'm just going to test under the ones that I already have, and wait for the bug reports to trickle in. :)

In doing the XML serialization work, I had the idea to make a common base class for the Teragon plugins, since they all have a bunch of identical boilerplate code in them. This wasn't such a bother for the parameter handling, since all of those functions were simple one-liners, but the serialization routine was starting to get rather complex and it pained me to keep copy-pasting it between plugins. So, I introduced a new abstract base class which extends AudioProcessor and takes care of all the PluginParameters related stuff. Doing this eliminates a ton of boilerplate code from all the plugins, making them much simpler to maintain and understand.

Also, today I fixed a nasty bug in NotNotchFilter where a small (but audible) click could be heard when moving from bypass to filter states. The reason for this is that the first "tick" of the knob ended up being a few hundred Hertz, which is quite an extreme difference to apply suddenly to a filter. Exponential scaling didn't work very well in practice for NotNotchFilter, because the frequency range goes from 0-20kHz, so the first half of the knob's motion would only cover ~10Hz, and the second half would race through all remaining frequencies.

So today, I busted open the venerable yet forgotten "Grapher" program which ships with Mac OSX. I discovered (or perhaps forgot) that one of the lesser-known features of this program is that you can generate a point set, and then interpolate through them. So I crafted a curve which would work well with the knob's range, and generated a 5th-degree polynomial equation to fit the points. The result is that now the knob is very comfortable to use, and the click is gone! I'll probably need to generate another set of curves for HiLoFilter, which has a similar problem but a different knob action.
Yay for math!

We wish you a GUI Christmas

Please forgive the kitschy title, I have never really gotten much into the Christmas spirit. Anyways, I'm stuck in Stockholm this Christmas, thanks to a last-minute flight cancellation, but I'm making the best of it. Hence, the enormous progress made on TeragonGuiComponents and associated plugins in the last few days. And really, a few uninterrupted days of coding, what more could I possibly ask for?

Yesterday I made big progress doing GUI work for several plugins. Now that I've pinned down a good workflow for doing layout with Pixelmator/Introjucer, I can really just bang them out. Specifically, I finished new GUIs for BeatCounter, HiLoFilter, and NotNotchFilter. I did some casual testing with 64-bit Ableton Live and all of the plugins seem to perform beautifully with their new shiny GUIs. I expect that I will have released new versions of each of these plugins by the end of the week.

I also busted out the old Windows laptop and fixed a few minor issues and got TeragonGuiComponents building with Visual Studio 2013. However, my idea of a nice and relaxing Christmas doesn't exactly include fighting with the retardedness that is Windows development, so I'll likely wait a few days before attempting to port and release the above plugins.

Today I made a GUI for ChaosChimp, a plugin I haven't talked about much here. It's still in beta but will be ready for a 1.0 release soon. Inspired by the Netflix Chaos Monkey, the plugin is designed to make bad things happen to your sequencer. Why on earth would anybody want this? Well, I see ChaosChimp having two main uses:

  1. Providing a tool for sequencer developers to simulate naughty plugins in their host.
  2. For DJs/Performers to simulate bad things happening to their computer and react accordingly.
That second point is originally why I developed the software. As technology improves, music setups become more complex, and the more complex things get, the more likely they can go wrong. Having backup plans can be the difference between a small glitch and an embarrassing evening.

For instance, one of the things ChaosChimp can do is attempt to crash the host. An easy "backup" for this is having an iPod (or whatever) playing on shuffle on a muted mixer channel. So instead of freaking out when something crashes, one can calmly cross-fade to the MP3 player and restart the sequencer in the meantime. It won't be the best mix of the evening, but it sure beats 60 seconds of silence, right? :)

Anyways, ChaosChimp currently has five different chaos providers, and some basic controls to how often and long the chaos lasts. Before today, this could only be controlled with the sequencer's built-in sliders, but with the new TeragonGuiComponents I was able to whip up a fully-functional GUI in about 2 hours (yes, I timed it).

Enter the chimp
Expect a 1.0 version (along with the releases of the other plugins) sometime after Christmas.

More GUI stuff

I spent a bit of time in Pixelmator today cleaning up the template document. I think that the template was a good idea, as it allows one to do GUI layout very rapidly. Each component is now grouped, making it easier to move around and position relative to other components. I also added an alignment layer for each component, so one can quickly do pixel-perfect positioning from Introjucer.

The result of this work was redoing the demo app for TeragonGuiComponents and doing a new GUI for HiLoFilter. I decided to redo the demo app GUI because when working on the template document, I noticed that label opacity and component positioning were incorrect. The original GUI for HiLoFilter was made without the template document, and it was actually faster to redo it using the template then it would be to retrofit it with the alignment guides.

It took me some time to get HiLoFilter compiling again, it seems that every time I open up a plug-in, I run into problems with some library or another not compiling under whatever the latest version of Mac OS X is. However, it is fruitless to simply curse Apple, instead one must fix the errors and raise the minimum supported OS version. This means that when all of the plug-ins have been updated with their shiny new GUIs, the minimum required Mac OS version will be OS X 10.7 (Lion).

I personally wish that I could still support Snow Leopard, however Apple is making it increasingly difficult for users to lag behind on older versions of Mac OS, which I suppose isn't such a bad thing. However, I personally haven't made the upgrade to Mavericks myself, as I'm still waiting for many plug-ins and sequencers (namely Ableton Live) to be supported. It's a bit of a Catch-22 situation.

On the plus side, I will be able to ship the 64-bit versions of all plug-ins, thus ensuring that they will be compatible with the latest version of Logic Pro X.

HiLoFilter GUI preview

HiLoFilter will be the next plugin to receive a GUI with the new TeragonGuiComponents kit. Here's a preview of the layout: