# KeySax 把键盘变成合成器

> KeySax 是一个可安装的静态 PWA，在浏览器内合成由键盘控制的多种乐器，并把演奏录制为视频或 WAV 文件。

KeySax 是一款可安装的静态 PWA，用电脑键盘控制合成乐器。开发者 emmi-dev12 于 2026-09-18 发布了它。声音由浏览器中的 Web Audio API 生成，偏好设置存入 `localStorage`。作者称，演奏不需要账户或云服务
（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

不同键盘行可以使用各自的乐器、八度与移调值，数字小键盘分配给鼓，空格键产生低音重击。停止录制后，KeySax 可以提供下落字母片段、整个应用的视频，或者 WAV 音频文件（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

<span id="keysax-包含什么"></span>

## 键盘乐器与录制

项目源于一个更小的键盘玩具，在那个玩具里，数字键会发出萨克斯声音。作者称，KeySax 的目标是把这个想法做成一种真正的乐器：可以安装、可以全屏演奏，并把声音留在用户自己的机器上。最终成果同时以可演奏应用和采用 MIT 许可证的源代码仓库发布（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

KeySax 没有为文章中描述的声音使用授权采样。每个音调都用 Web Audio API 在浏览器中合成。文章还表示，应用没有登录、没有服务器，偏好则写入 `localStorage`（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 作者列出的安装路径

文章给出了几个浏览器入口的安装方法。在 Chrome 与 Edge 中使用“Install app”；在 Mac 上的 Safari 中依次选择 File 与 Add to Dock；在 iPhone 与 iPad 上依次选择 Share 与 Add to Home Screen。安装之后，文章称 KeySax 会出现在 Dock 或主屏幕上（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

文章还建议在需要取得新副本时用 `Command-R` 重新加载（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 键盘布局与默认值

可演奏表面覆盖四行键盘、数字小键盘和空格键。第一行从反引号经过数字键直到右侧标点，默认使用中音萨克斯；QWERTY 行默认是卡林巴琴，主行默认是钢琴，底部字母行默认是吉他（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

四行之外，数字小键盘默认对应鼓，空格键会触发一次低音重击。作者称，每一行都有自己的乐器、八度与移调设置（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

作者列出的可选乐器包括次中音萨克斯、上低音萨克斯、YouTube 萨克斯音色、Rhodes、玻璃、水晶铃、音乐盒与铺底音色。文章还描述了两种萨克斯引擎：一种基于经典加法谐波，另一种叫簧片波导。这些都是可以为某一键盘行选择的音色（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 音阶与演奏

KeySax 默认采用文章称作 YouTube 音阶的一组音，依次为 C、D、E、F、G、A 与降 B。设置中还包括大调、小调、五声音阶、布鲁斯、混合利底亚、多利亚和半音阶（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

文章用《生日快乐》作为简短演奏示例，选择以 C 为根音的 YouTube 音阶，并用主行演奏文中打印的按键序列（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

作者表示，录制时字母会下落，并逐渐组成一个句子；按住 Shift 则会在字母视频中生成大写字母，以及 `!`、`@`、`#` 等字符（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 录制输出

录制通过标为“Record”的控件开始。用户停止之后，文章称 KeySax 可以下载字母片段、整个应用的视频，或者只下载 WAV（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

文章末尾的实现说明点名了作用于 canvas stream 的 `MediaRecorder`，同时还列出了 Web Audio graph，以及在存在目标设备时使用的 MIDI 输出（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 静态部署与源代码

作者把 KeySax 描述为托管在 GitHub Pages 上的静态 PWA。源代码采用 MIT 许可证发布，文章称 `docs/` 文件夹本身就是应用。按照原文，贡献者无需处理构建步骤；作者邀请读者克隆仓库、修改簧片或添加音色，然后提交 pull request（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

文章中的实现摘要点名了 service worker、Web Audio graph、canvas stream 上的 `MediaRecorder`，以及可选 MIDI 输出。文章还表示偏好使用 `localStorage`，并且 KeySax 没有服务器（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

### 音频与录制路径背后的标准

Web Audio 规范把 `AudioContext` 定义为包含音频信号图的对象。规范把 `AudioNode` 描述为图中的音频源、输出端和中间处理模块，并规定这些节点可以动态连接。规范还把 `OscillatorNode` 定义为生成周期波形的音频源，并明确称振荡器是音频合成的基础构件。它可以使用常见波形，也可以通过 `PeriodicWave` 使用任意周期波形（[Web Audio API](https://www.w3.org/TR/webaudio-1.0/)）。

这些定义说明了 KeySax 作者所称 Web Audio graph 在平台标准中的含义：音频源、处理模块和输出端用节点连接组成处理图。规范本身并不能证明 KeySax 使用了哪些节点类型、采用怎样的连接拓扑，或为两种萨克斯引擎选择了哪些合成参数。因此，只有作者明确披露的 Web Audio graph 算作实现信息；原文没有列出的节点拓扑和合成参数仍保留在待核实列表中（[Web Audio API](https://www.w3.org/TR/webaudio-1.0/)；[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

MediaStream Recording 规范把 `MediaRecorder` 定义为对 `MediaStream` 中的轨道录制，并把收集的数据交付为 `Blob`。规范还规定，当录制所用的容器与编解码器没有完全指定时，用户代理可以选择具体配置；录制开始后，`mimeType` 会反映实际配置。这个标准边界解释了为什么仅凭 KeySax 使用 `MediaRecorder`，不能推出其完整应用视频在每个浏览器中使用何种容器或编解码器（[MediaStream Recording](https://www.w3.org/TR/mediastream-recording/)）。

该录制规范也定义了停止、数据可用与错误等事件，并列出轨道集合发生变化、隔离属性改变或用户代理无法继续收集数据时的处理步骤。这些是 `MediaRecorder` 的通用行为；KeySax 是否为这些情况提供额外界面或恢复逻辑，作者没有说明（[MediaStream Recording](https://www.w3.org/TR/mediastream-recording/)）。

<span id="对-pwa-开发者为什么重要"></span>

## 浏览器合成声音对演奏与录制的意义

作者希望 KeySax 成为一种可以安装、全屏演奏并留在用户机器上的乐器。文章把它描述为托管在 GitHub Pages 上的静态 PWA；声音在浏览器中合成，偏好保存在 `localStorage`（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

文章点名了 Web Audio graph、下落字母，以及字母片段、完整应用视频和 WAV 文件等录制输出。它还把 canvas stream 上的 `MediaRecorder` 列为一项实现细节（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

每一行都能有自己的音色、八度与移调值，数字小键盘默认对应鼓，空格键会触发低音重击。文章还打印了一段使用主行的《生日快乐》按键序列，采用以 C 为根音的 YouTube 音阶（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

源代码采用 MIT 许可证发布。作者把 `docs/` 目录指为应用本身，表示没有需要管理的构建步骤，并点名了 service worker、Web Audio graph、canvas stream 上的 `MediaRecorder` 和可选 MIDI 输出（[KeySax 原文](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)）。

## 站内相关条目

- [WebAPK 安装](/zh/reference/installation/webapk/)：WebAPK 安装。
- [桌面平台](/zh/reference/platforms/desktop/)：桌面平台支持。
- [按操作系统查看兼容性](/zh/compatibility/by-os/)：各操作系统的兼容性。

## 待核实

- 用于测试所列安装入口的 Chrome、Edge、Safari、macOS、iOS 与 iPadOS 版本尚未确认。
- 首次加载后哪些应用资源仍然可离线使用尚未确认。
- 不同设备上的音频延迟与复音上限尚未确认。
- 完整应用视频下载所用的编解码器与容器格式尚未确认。
- 每种录制输出以及可选 MIDI 目标的浏览器支持范围尚未确认。
- `localStorage` 中偏好的持久化与迁移行为尚未确认。
- 不通过实体键盘演奏的用户会获得怎样的无障碍体验尚未确认。
- 加法合成与簧片波导两种萨克斯引擎的具体合成参数尚未确认。

## 参考来源

- [KeySax, your keyboard is a saxophone](https://dev.to/emmi-dev12/keysax-your-keyboard-is-a-saxophone-94k)（dev.to）
- [Web Audio API](https://www.w3.org/TR/webaudio-1.0/)（W3C）
- [MediaStream Recording](https://www.w3.org/TR/mediastream-recording/)（W3C）