top of page

PROGRAMMING

I love to learn. When I want to understand all the different aspects of a craft and really dig my fingers into it to know how it all works, then it's a matter of time before the soldering iron comes out, the books get dusted off, or the code examples get deconstructed. Because the best way to speak on a topic is to speak from experience. 

Over the years, I’ve learned to read the relative functionality of new features from the code. I've participated in code reviews, suggested some changes, and even written things entirely on my own. Some of the code I wrote for documentation features has even been integrated into the products themself. 

 

In my free time, I've spent countless hours spelunking down the rabbit hole of programming audio components with Max/MSP, a visual audio scripting language for complex sound processing. Currently I have over 50,000 downloads of my software, and have had my work featured in videos and music blogs. I’ve even gotten a handful of emails from famous producers who used it and had questions or feature requests.

 

I'm no developer by any stretch of the imagination, then I'm always game to give it my all.

APPROACH

Life in tech is about adjusting to change and making your own solutions. Priorities change, staff changes, scope changes, and things get lost in the shuffle. I worked with a team in Madrid who produced a number of plugins to collect NXLog messages from various sources. Once the backend work was complete, they were called to work on another project, so the configuration process was left to tech pubs to finish. This meant telling the users how to go into a text editor for a loosely organized, 600-line configurations file and edit it. We had 12 primary NXLog sources in the configuration file (some of which were incompatible with one another), with configurations based on three different protocol. Additionally, the user needed to manually enter the file paths and IP address in some sections of the file, with errors being hard to diagnose if made.

 

The configurations file was causing consistent confusion, and the support and sales engineering teams were the ones left to reassemble the config files in customer environments. While triaging tickets, I would usually find support tickets about the configurations file, and there were a few tickets in the Engineering backlog related to it as well. Having tooled around with issues of variable output content while programming DSP processing in Max/MSP, I offered to add a JavaScript tool to the documentation that would basically allow the user to assign what the need, enter the relevant information, and have the configuration compiled to their environment's specs with a click of a button.

JavaScript-Compiler.gif

The end result was simple and clean. It was my first time working with JavaScript to that capacity; I'd only previously worked with simple jQuery additions to pages. I had the support and sales engineering teams test it out, and they loved it. Within a month, it got around to some of the PMs, and the tool was taken from the documentation pages and implemented directly into the software.

Legend has it that an estranged draft of the code still haunts CodePen to this very day...

JAVASCRIPT TOOL

I love to mess around and program audio devices with Max/MSP. I've even taken some of my ideas and adapted them as patches to share for free with Ableton users on the maxforlive site. I’ve garnered over 50k downloads so far, and the audio effects have already found their way onto various demos and studio albums. 

Keeping in line with the native UI of Ableton that is accessible in the API, I’ve tried to straddle the line between a functional interface with minimum latency and low CPU usage, which sometimes requires small sacrifices for code optimization, but I’m proud of a lot of the solutions I’ve come up. I’ve collected a few of my favs here.

College Dropout is an audio-drop/pitch-drop effect akin to a battered old cassette tape that's due to pop any day now. I came up with a probabilistic algorithm to periodically drop the volume and, optionally, the pitch either in unison or stereo. I also tacked on some tape hiss and some other parameters (including some secret ~hidden~ controls) for the distinguished knob-tweaker.

CollegeDropout.gif

High School Crush is a bitcrush/sample rate reduction effect. Typically, digital effects like this tend to cause harmonic resonances due to anti-aliasing, but I used three parallel instances to blur the harmonic relationship and added crossover filters with wet/dry controls to help shave off unwanted high frequencies to maintain the strength of the fundamental frequencies. Just what all the kids were clamoring for. 

HighSchoolCrush.gif

Grain Mill is a granular delay that uses two asynchronous granulator objects for that delicious fragmenting of realtime audio input à la Christian Fennesz and Tim Hecker. The audio channels can be mixed against the dry signal, and the master output can be further contoured by the additional side-chain compressor at the end of the signal. For the connoisseur of the unusual, this is a multi-course meal of strange.

GrainMill.gif

SOUND DESIGN

bottom of page