EMCT: COMPUTING MAJOR PROJECT

Part 7: RustyAudioLib, A journey of discovery and anguish but one I’m glad I made

Rusty
4 min readAug 4, 2023
Maybe it’s time for some rest now though

As I sit here reflecting on the journey of my final project, I can’t help but feel a sense of accomplishment and growth. The trip, which started with a simple question — “What is an audio effect?” — has led me down a path of deep exploration and understanding, culminating in the creation of RustyAudioLib. I feel much wiser than I did beginning this project and feel like I have built firm skills that I will cary with me for the rest of my career.

In the beginning, as I outlined in my first blog post, my project was an introspective journey driven by a personal ambition to augment my knowledge of audio programming and acquire the skill to construct high-quality audio software from my researched principles. The project explored the direct impact of technical design decisions and understanding how the affect the product, end user and designer.

The second part of my journey involved a debate on using Rust as the programming language of choice for the Major Project. This decision was not taken lightly, and after much deliberation, I decided to abandon Rust for C++, as I shared in my fourth blog post. This decision was a pivot of necessity, but one I am thrilled happened. It allowed for a more efficient exploration of the underlying theory of audio effects and the use cases of audio frameworks and provided a more versatile tool for end users.

The third part of my journey was about quantifying the underlying principles of audio effects from a technical/coding perspective. This deep dive into the theory of audio effects led to the decision to build a library rather than a plugin, as I shared in my fifth blog post. This part in particular is an area I’m proud of as my original research surrounding the underlying principles of audio effects is topic not particularly well trodden and I’m genuinely proud of the quality of that background research.

The final part of my journey involved finding a way to process audio samples and instantiate DSP behaviour, which I shared in my sixth blog post. This was a significant milestone in the project, as it marked the point where RustyAudioLib became genuinely usable and more than just an audio engine and some build scripts. This is where it became a real tool and the technical design choices I’ve made in RustyAudioLib’s design means I can expand the project out. If I decide I want to learn how to make a reverb unit, great! I can do that in RustyAudioLibrary and push that to the git repo as an update.

Looking back and evaluating the project, I really am happy with the outcome of the project. My primary objective was to delve as deeply as possible into audio fundamentals, establishing a foundational comprehension and categorisation of the underlying principles of audio effects. This goal was successfully achieved. My knowledge and skills as an audio programmer have undoubtedly been enriched, thanks to the innovative processes I devised during this project and the understanding gleaned through extensive research. That’s what I wanted, so I feel it was successful. And that’s not even accounting for how user friendly the end product of RustyAudioLibrary is, how someone with a bare bones basic level of C++ programming experience could produce an audio effect with a few lines of code. I’m proud of that. To achieve that goal required real thought about my design of the program.

However, as with any journey, there were areas I would focus on for improvement. While the library was deliberately built to facilitate expansion by adding more RustyProcessors or RustyModulators, I would have preferred it to have even greater functionality. Adding more advanced DSP units to the project, such as reverbs or delays, would have been great to have instantiated at the point of submission. Moreover, I would have liked the audio effects to compile to a host environment, which would require wrapping them in a VST or AU layer. I did explore this but it was outside the scope of the project and honestly my current skill level programming wise. But going forward this will be something I look to expand into and may even work into RustyAudioLibrary in the future.

In conclusion, this project was a remarkable undertaking, and while it killed me at points I wouldn't have had it any other way. I hope readers (and whoever marks it) can appreciate the intricate technical work that was involved in developing such a comprehensive tool from scratch without minimal framework support. As I look ahead, I plan to make RustyAudioLib open source, invite improvements from the C++ community, which I am proud to be a part of, and expand RustyAudioLibrary with additional components, including the reverb unit mentioned earlier and plugin host format compilation (VST/AU), as mentioned.

Ah well.

Here’s to future projects, RustyAudioLibrary and Goldsmiths!! 🍻

It’s been a blast! 🚀

Git Repo:
https://github.com/rusty-vibess/RustyAudioLibrary

Docs:
https://rusty-vibess.github.io/RustyAudioLibrary-docs/docs/html/index.html

Written: Aug 3, 2023

--

--

Rusty

Audio, Coding, Technology and Music --- Educational blog posts on a variety of creative computing works.