TorqueTuner
As a part of my master's thesis research, I revived and redesigned an open-source haptic device called the TorqueTuner. The TorqueTuner is designed to produce force feedback effects on a rotary encoder (for example, simulating the feeling of detents or a spring as you turn the knob).
I first recreated the original design from scratch in KiCad, since the motor control board was discontinued. Once this design was validated, I created a new version which consolidated the motor control and haptic rendering onto a single board (ESP32-S3), reducing latency and improving ease of use. The new design also required porting and consolidating the firmware, which I did in C++ using the Arduino framework. Finally, I developed a GUI for the device in Python, which allows users to create and upload haptic effects to the device.
More details can be found at the TorqueTuner Hardware and TorqueTuner Firmware GitHub repositories.
SWITCH8
SWITCH8 is a digitally-controlled analog audio multiplexer, designed for client Flock Audio as a part of my undergraduate capstone project. It features eight stereo inputs, one stereo input (in both TRS and XLR format), digital control and display, and entirely analog signal routing. Our prototype was later adapted into Flock Audio's SWITCH (currently commercially available!).
For this project, I designed the entire four-layer PCB in KiCad, including the power supply, MCU circuitry, and the analog audio path. Thanks to great group members and solid coordination with the firmware half of the team, we actually managed to deliver a fully functional prototype at the end of the semester!
Tape-Echo with Physically Informed Tape Modelling
A MATLAB implementation of J. Chowdhury's tape machine model, completed as my final project for MUMT 618 (Computational Modelling of Musical Acoustics) at McGill. The model draws on the physical principles of magnetic recording to reproduce tape saturation, wow/flutter, and loss effects resulting from magnetization and playback. I combined the tape machine model with a delay-line-based echo function to create a tape-echo effect reminiscnent of the Roland RE-201 Space Echo (or at least, that's what I was going for).
I have a real affinity for cassette as a music format. More than CD or vinyl, I think it is defined by its limitations, which have only become more endearing since its displacement by CD and later streaming. As Brian Eno said, "Whatever you now find weird, ugly, uncomfortable, and nasty about a new medium will surely become its signature". This was an homage to the cassette tape and all its quirks.
Read my paper on the project, which describes the model in much greater detail, here.
TheraGlitch: Gestural Control of Glitch Music
TheraGlitch was a digital musical instrument I developed as my final project for MUMT 620 (Gestural Control of Sound Synthesis) at McGill. Inspired by Kim Cascone's paper exploring interfaces for glitch music, I created a Theremin-like instrument which allows users to control pitch, volume, and glitch effects through physical gestures (namely, distance sensing, force sensing and striking the instrument respectively). Under the hood, I had an ultrasonic distance sensor, force-sensing resistors, and an accelerometer connected to a Bela microcontroller running a custom Pure Data patch for low-latency embedded audio synthesis.
My idea was to synthesize (pun intended) class readings with my interest in experimental electronic music. I drew on metaphor-guided DMI design by mapping glitch control to striking the instrument, tying sound-degradation of the instrumental-frustration. And the enclosure references famous guitar-bashers The Who.
You can read more about the TheraGlitch here.
Broad-Band Noise Suppression Using Short-Time Spectral Attenuation
Another MATLAB implementation, this time of a noise suppression algorithm based on short-time spectral attenuation, done as my final project for MUMT 605 (Digital Sound Synthesis and Audio Process) at McGill. If we take the STFT of a noisy audio signal and compute the spectrum of a sample of just the noise, we can recover a denoised signal by applying a Wiener filter and attenuating the noisy signal's spectrum in the time-frequency bins where noise is dominant. For as simple as the algorithm was, it worked really well, especially for speech and single-instrument recordings.
You can probably see a trend in my grad school projects. I like lo-fi music. Which maybe makes this project sacrilege. I even denoised Daniel Johnston's "Walking the Cow" for my demo, and inadvertenly removed some of the soul along with the noise. One day I'll write some big rambling essay about hardware limitations and lo-fi aesthetics...
Read my paper on the project here.
Modelling Cognitive Radio in MATLAB
As a part of the Dean's Research Award program at the University of Alberta, I developed a cognitive radio simulation in MATLAB. The simulation used an energy detection algorithm to identify vacant frequency bands in a noisy environment and transmit data within them. I evaluated the performance of the system by varying the transmit signal-to-noise ratio and interference power and observing how the bit-error rate was affected.