Skip to main content

Projects

JSynth (Code)

JSynth is a highly modular polyphonic software synthesizer written in C++. Qt is used to render the GUI, allowing the user to drag and drop synthesis modules (e.g. oscillators, filters, envelopes, etc.) around the main window and to link modules together to form synthesis pipelines. JSynth integrates with RtMidi to allow MIDI input devices to be used to play the virtual instruments and RtAudio to provide low-latency audio feedback.

Opkit (Code)

In recent years, a number of machine learning frameworks (e.g. Tensorflow, pyTorch) have been created that provide a graph-based API rather than a traditional object class hierarchy. With these systems, the nodes in the graph represent simple operations (like addition or matrix multiplication) and the edges represent tensors (multi-dimensional matrices). These graph-based systems allow users to chain simple operations together to form arbitrarily large expressions that can be automatically differentiated and easily parallelized across threads or machines, providing considerably more flexibility in implementation.

The purpose of Opkit is to implement a similar interface in native, modern C++, allowing users to define arbitrarily complicated expressions that can be optimized with many different optimization techniques, making it well suited for machine learning research.

Hough-Art (Code)

The Hough Transform is often used in image processing to identify the equations for lines within a single image.  Though functionally very useful, the result of the transformation is also quite aesthetically pleasing. This C++/DevIL program takes either a single image or a directory of images as input and performs the Hough Transform on each, producing a new piece of artwork. It provides several options, including the ability to select which color channels are used, the dimensions of the output image, and the resulting brightness.

A typical output of the Hough-Art program

GB-Emulator (Code)

GB-Emulator is a console-based emulator for the original Gameboy and Gameboy Color platforms written in C++ using SDL2. It is very accurate and computationally efficient.

ARFF-Plotter (Code)

Arff files are a common text-based format for storing machine learning datasets. This utility allows users to visualize up to three selected attributes in a 3D environment using their browser and WebGL. It also supports keyboard and mouse movement for interactivity.