gvsong

I created a music engine for the Game Boy Advance, called gvsong. It is a chiptune synthesizer that uses sink to write music patterns.

Watch a demo video of it running in a GBA emulator.

gvasm

In my quest to make Game Boy Advance homebrew games, I created an assembler specifically for coding in ARM/Thumb assembly.

It’s called gvasm. It supports pool literals, compile-time scripting, register renaming, and a bunch of other features!

whisky

I spent a couple months searching through hundreds of thousands of functions to find the best hash functions with fewest operators.

The result is the whisky library.

These functions are useful for random number generation, hash tables, checksums, or procedural game development.

sink

Sink is a scripting language I’ve been working on for a while now. It’s a minimalistic garbage-collected language designed for embedding into larger programs, with support for a REPL ideal for debug consoles.

It is currently in beta, and I am working hard to reach version 1.0. I’m really happy with it and think it’s a great little language.

There is also an online demo that you can play with.

polybooljs

The polybooljs library is the result of my research into polygon clipping algorithms. It can clip polygons against each other using boolean operations (union, intersection, xor, difference), and can handle coincident edges.

sndfilter

I’ve been reimplementing sound effects in clean C99 code. It’s actually pretty hard to find easy to use libraries that do things like reverb, dynamic range compression, or equalization filters. Well, not anymore!

sndfilter on GitHub

midimap

The midimap program will intercept MIDI messages on Mac OSX, and manipulate them according to a script.

Some example use cases include: playing a chord when hitting a single key, mapping a sustain pedal to a key, stopping devices from sending reset commands, and printing out intercepted messages.

ADSRNode

ADSRNode is a function that generates an ADSR envelope for use within WebAudio.

Check out the demo to get an idea of how the curve is generated. Since it’s a WebAudio node, it can be connected to any other parameter inside the WebAudio API.

simple-js-synth

I built a basic three oscillator synthesizer using WebAudio, intended to be used as a simple drop-in synth for music experiments.

spline

Implementation of Catmull-Rom splines in C and JavaScript.

The library takes a list of points (2D, 3D, or 4D) and returns a smooth curve that passes through the points.

spline on GitHub

nvqm

I put together a library for numeric, vector, quaternion, and matrix operations, with implementations in C99, JavaScript, TypeScript, and Sink:

nvqm on GitHub

Tools

I make random tools for my own use. You can check them out if you want, though they aren’t really intended for others to use.

For example, Time Sink is a simple web app that uses my scripting language sink to create one second looping GIFs.