Hotkeys in Chip Player JS

List of super-secret keyboard shortcuts for Chip Player JS: Shortcut Action Media Keys Playback control is fully supported ← (Left Arrow) Seek backward 5 seconds ➔ (Right Arrow) Seek forward 5 seconds ␣ (Space bar) Toggle play/pause - (Minus) Decrease speed 10% = (Equals) Increase speed 10% Shift+- (Underscore) Decrease speed 1% Shift+= (Plus) Increase […]

Chip Player JS

Chip Player JS began in August 2018. Ten years ago, I stopped using Windows and switched to Mac. But I held on to a Windows XP virtual machine – for the sole purpose of playing ancient music formats in Winamp. Even while I was working at Spotify, Winamp was running in the background. Chip Player JS […]

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: Most UMG tracks are now watermark-free on Spotify.  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 mid-June 2019: Living […]

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 […]