Under the Hood: Native Audio Plugins for Unity
Yesterday, I had the awesome opportunity to give a presentation at a local Game Audio Boston meetup. The audience was a wonderful group of game developers, sound designers, composers, programmers, and students. Game Audio Boston meets monthly in the Boston area; if you find yourself in town during one of their gatherings, check it out!
The talk that I gave is one that I've been thinking about for a while. Digital signal processing was always a pretty intimidating subject for me, and even as I started getting into it some years ago, it wasn't without a pretty strong imposter syndrome feeling. I could get a filter implementation working but would second guess it and assume that a "real" signal processing engineer would laugh at it. And looking through some of the old DAFx proceedings, for example, always came with a sense of "yea, I'm not cut out for this."
The more I've gotten into it, the more I've realized it's not that scary. Once I developed enough of a foundational understanding, I started to piece together a way of thinking about digital signal processing that felt really intuitive and excited the creative side of my brain. That's the side of signal processing that I wanted to share in this talk, with the hopes of encouraging people through any intimidation they may feel. With that groundwork laid, and because we were at the Game Audio Boston meetup after all, I wanted to carry that encouragement into a workshop activity in building a fully functional Unity native audio plugin with JUCE, after the recent support announcement.
The talk starts with a very high level look at sound in the physical world, followed by an introduction to the Fourier Theorem just brief enough to break down a noisy signal into a set of sine waves such that we could examine one in isolation and simplify our mental framework. Then we briefly covered digital sampling and the Nyquist-Shannon Theorem, which is explained more thoroughly in a different context in my previous blog post, before stepping through a quick discussion of the architecture of an audio application and audio plugin. Finally, we used our digital sampling visuals to explore an intuitive explanation of a simple first order (one-pole) lowpass implementation. Then, in the second half of the talk, we pulled out our laptops and built a real, working implementation of this first order lowpass filter, and loaded it into an example Unity project to bring the conversation full circle.
You can see the slides from the talk above, and find our example project on Github.