Flat-Shaded Polygon 3D Games

I've started maintaining a list of flat-shaded 3D games from the 1980s and 1990s over here: Flat-Shaded 3D Polygon Games.

NES APU Note Table

The NES RP2A03 CPU clock runs at 1.789773MHz (NTSC). In producing audio, the wave period of the pulse ("square wave") channels is specified in timer units of 16 clock cycles. This means the period is quantized to units of 16/1,789,773 second. The triangle channel, usually used for bass lines, uses 32-cycle timer units, so for […]

An Update on UMG Watermarks

April 2020 Update: All UMG tracks are now clean. Enjoy the music! ♪ ♫ Today, years after first complaining about Spotify sound quality issues, I'm happy to report this problem is fading out. It appears that watermarks are gradually disappearing from the Universal catalog. The following tracks have undergone a marked improvement, first noticed in […]

How to type emoji in one keystroke on a Mac

It's easy to create keyboard shortcuts on macOS without using 3rd party apps (like Karabiner) or Text Replacement (which doesn't work in Chrome). Here's how to do it. You'll need to edit this Key Binding dict: $ vi ~/Library/KeyBindings/DefaultKeyBinding.dict Here's my DefaultKeyBinding.dict as an example: { /* Remap Home/End to Windows-like behavior */ "\UF729" = […]

Unlock JavaScript Web Audio in Safari and Chrome

Update: This is now necessary for Chrome, too. You might see this message in the console: The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. It can be tricky to deal with Web Audio because browser vendors have measures in place to protect users […]

A Phase-Aligned Oscilloscope for Web Audio

A music synthesizer should produce nice periodic waveforms when a note is played. We should be able to see that regularity when we visualize the sound pressure with an oscilloscope, here demonstrated with the Yamaha DX7 emulator: The Problem We can see the regularity, but hold on. The waveform is jumping around, flickering left and right. It doesn't […]

Yamaha DX7 and MIDI in JavaScript

Check the demo or find the source at This Yamaha DX7 emulator is my attempt to do something cool with the Web Audio APIs. The synth responds to MIDI input (make sure your device is hooked up before you start your browser) including pitch bend, mod wheel, and aftertouch.  I've added the ability to pan the operators for […]

Thoughts on Rdio UX

Rdio was known for its clean design and simple user interface. The attention to detail really made a difference in the product and it was one of my favorite parts of working there. Some years ago, I collected ideas for further improving Rdio's web UX in the following document. Many of the points are obsolete and were addressed in later updates. […]