Skip to content

KeySax turns a keyboard into a synthesizer

Published

KeySax turns computer keyboard keys into controls for synthesized instruments in an installable static PWA. Developer emmi-dev12 published it on 2026-09-18. It generates tones in the browser with the Web Audio API and stores preferences in localStorage; the experience described by the author needs no account or cloud service (the KeySax article).

Different keyboard rows can use different instruments, with separate octave and transposition settings; the numpad is assigned to drums, and the space bar produces a bass thump. When recording stops, KeySax can provide a clip of the falling letters or a video of the whole application. A WAV audio file is another output option (the KeySax article).

The project began from a smaller keyboard toy in which number keys produce saxophone sounds. The author says the goal for KeySax was to turn that idea into an installable instrument that could be played full screen and keep its sounds on the user’s machine. The result is published as both a playable application and an MIT-licensed source repository (the KeySax article).

KeySax does not use licensed samples for the sounds described in the announcement. Instead, every tone is synthesized in the browser through the Web Audio API. The article also says there is no login and no server, while preferences are stored in localStorage (the KeySax article).

The article gives installation directions for several browser surfaces. In Chrome and Edge, it says to use “Install app.” In Safari on Mac, it gives File, then Add to Dock. On iPhone and iPad, it gives Share, then Add to Home Screen. After installation, the article says KeySax is available from the dock or home screen (the KeySax article).

The article also tells users to reload with Command-R if they need a fresh copy (the KeySax article).

The playable surface covers four keyboard rows along with the numpad and the space bar. The number row, from the backtick through the number keys and punctuation at its right edge, defaults to alto sax. The QWERTY row defaults to kalimba. The home row defaults to piano and the bottom letter row to guitar (the KeySax article).

Outside those four rows, the numpad defaults to drums and the space bar triggers a bass thump. The author says each row has its own instrument setting, along with octave and transpose settings (the KeySax article).

The instrument choices named by the author include tenor sax, baritone sax, a YouTube sax voice, Rhodes, crystal glass, chimes, music box, and a pad. The article also describes two sax engines: one based on classic additive harmonics and one described as a reed waveguide. These are offered as voices that can be selected for a row (the KeySax article).

KeySax defaults to the scale the article calls the YouTube scale, listed as C, D, E, F, G, A, and B-flat. Its settings also include major, minor, pentatonic, blues, mixolydian, dorian, and chromatic scales (the KeySax article).

The article gives “Happy Birthday” as a compact playing example. It selects the YouTube scale with C as the root and uses the home row for the note sequence printed in the post (the KeySax article).

The author says letters fall and a sentence forms while recording. Holding Shift produces uppercase letters and characters such as ! and @, as well as # in the letter video (the KeySax article).

Recording starts through a control labeled “Record.” When the user stops, the article says KeySax can download the letter clip or a video of the whole application. Users can also download only the WAV (the KeySax article).

The implementation note near the end of the article names MediaRecorder operating on a canvas stream. It also names a Web Audio graph and MIDI output when a destination is available (the KeySax article).

The author describes KeySax as a static PWA hosted on GitHub Pages. Its source is published under the MIT license, and the article says the docs/ folder is the application. There is no build step a contributor needs to handle according to the post, which invites readers to clone the repository and modify a voice, then submit a pull request (the KeySax article).

The implementation summary in the article names a service worker, a Web Audio graph, MediaRecorder on a canvas stream, and optional MIDI output. The article also says that preferences use localStorage and that KeySax has no server (the KeySax article).

The standards behind the audio and recording paths

Section titled “The standards behind the audio and recording paths”

The Web Audio specification defines an AudioContext as containing an audio signal graph. It describes AudioNode objects as the graph’s sources and outputs as well as its intermediate processing modules. It says nodes can be connected dynamically. The specification also defines OscillatorNode as a source that generates a periodic waveform and identifies oscillators as foundational building blocks in audio synthesis (Web Audio API).

Those definitions establish the platform meaning of the Web Audio graph named by the KeySax author. They do not establish which node types or graph topology KeySax uses, or what its synthesis parameters are; those implementation details remain limited to what the author disclosed in the article (Web Audio API; the KeySax article).

The MediaStream Recording specification defines MediaRecorder as recording the tracks of a MediaStream and gathering the result into a Blob. It also states that the user agent may choose the container and codecs when they are not fully specified. That standards-defined behavior supports keeping KeySax’s unreported video container and codec choices in the unverified list instead of inferring them from the use of MediaRecorder (MediaStream Recording).

Significance for browser instruments and recording

Section titled “Significance for browser instruments and recording”

The author wanted KeySax to be an instrument users could install on their own machines and play full screen. The article describes it as a static PWA on GitHub Pages, with sounds synthesized in the browser and preferences stored in localStorage (the KeySax article).

The article names a Web Audio graph and falling letters. Its recording outputs include a letter clip and a video of the whole application, with a WAV file also available. It identifies MediaRecorder on a canvas stream as an implementation detail (the KeySax article).

Each keyboard row can have its own voice and octave setting, along with a transpose value, while the numpad defaults to drums and the space bar triggers a bass thump. The article also prints a “Happy Birthday” key sequence for the home row using the YouTube scale with C as the root (the KeySax article).

The source is available under the MIT license. The author identifies the docs/ directory as the application and says there is no build step to manage. The implementation includes a service worker and a Web Audio graph, with MediaRecorder on a canvas stream and optional MIDI output (the KeySax article).

  • The Chrome, Edge, Safari, macOS, iOS, and iPadOS versions used to test the listed installation paths are not confirmed.
  • Which application resources remain available offline after the first load is not confirmed.
  • The audio latency and polyphony limits on different devices are not confirmed.
  • The codecs and container formats used by the full-application video download are not confirmed.
  • Browser support for every recording output and optional MIDI destination is not confirmed.
  • The persistence and migration behavior of preferences stored in localStorage are not confirmed.
  • Accessibility behavior for users who do not play through a physical keyboard is not confirmed.
  • The exact synthesis parameters for the additive and reed-waveguide sax engines are not confirmed.