KeySax 把键盘变成合成器
发布于
KeySax 是一款可安装的静态 PWA,用电脑键盘控制合成乐器。开发者 emmi-dev12 于 2026-09-18 发布了它。声音由浏览器中的 Web Audio API 生成,偏好设置存入 localStorage。作者称,演奏不需要账户或云服务
(KeySax 原文)。
不同键盘行可以使用各自的乐器、八度与移调值,数字小键盘分配给鼓,空格键产生低音重击。停止录制后,KeySax 可以提供下落字母片段、整个应用的视频,或者 WAV 音频文件(KeySax 原文)。
键盘乐器与录制
链接到“键盘乐器与录制”一节项目源于一个更小的键盘玩具,在那个玩具里,数字键会发出萨克斯声音。作者称,KeySax 的目标是把这个想法做成一种真正的乐器:可以安装、可以全屏演奏,并把声音留在用户自己的机器上。最终成果同时以可演奏应用和采用 MIT 许可证的源代码仓库发布(KeySax 原文)。
KeySax 没有为文章中描述的声音使用授权采样。每个音调都用 Web Audio API 在浏览器中合成。文章还表示,应用没有登录、没有服务器,偏好则写入 localStorage(KeySax 原文)。
作者列出的安装路径
链接到“作者列出的安装路径”一节文章给出了几个浏览器入口的安装方法。在 Chrome 与 Edge 中使用“Install app”;在 Mac 上的 Safari 中依次选择 File 与 Add to Dock;在 iPhone 与 iPad 上依次选择 Share 与 Add to Home Screen。安装之后,文章称 KeySax 会出现在 Dock 或主屏幕上(KeySax 原文)。
文章还建议在需要取得新副本时用 Command-R 重新加载(KeySax 原文)。
键盘布局与默认值
链接到“键盘布局与默认值”一节可演奏表面覆盖四行键盘、数字小键盘和空格键。第一行从反引号经过数字键直到右侧标点,默认使用中音萨克斯;QWERTY 行默认是卡林巴琴,主行默认是钢琴,底部字母行默认是吉他(KeySax 原文)。
四行之外,数字小键盘默认对应鼓,空格键会触发一次低音重击。作者称,每一行都有自己的乐器、八度与移调设置(KeySax 原文)。
作者列出的可选乐器包括次中音萨克斯、上低音萨克斯、YouTube 萨克斯音色、Rhodes、玻璃、水晶铃、音乐盒与铺底音色。文章还描述了两种萨克斯引擎:一种基于经典加法谐波,另一种叫簧片波导。这些都是可以为某一键盘行选择的音色(KeySax 原文)。
音阶与演奏
链接到“音阶与演奏”一节KeySax 默认采用文章称作 YouTube 音阶的一组音,依次为 C、D、E、F、G、A 与降 B。设置中还包括大调、小调、五声音阶、布鲁斯、混合利底亚、多利亚和半音阶(KeySax 原文)。
文章用《生日快乐》作为简短演奏示例,选择以 C 为根音的 YouTube 音阶,并用主行演奏文中打印的按键序列(KeySax 原文)。
作者表示,录制时字母会下落,并逐渐组成一个句子;按住 Shift 则会在字母视频中生成大写字母,以及 !、@、# 等字符(KeySax 原文)。
录制输出
链接到“录制输出”一节录制通过标为“Record”的控件开始。用户停止之后,文章称 KeySax 可以下载字母片段、整个应用的视频,或者只下载 WAV(KeySax 原文)。
文章末尾的实现说明点名了作用于 canvas stream 的 MediaRecorder,同时还列出了 Web Audio graph,以及在存在目标设备时使用的 MIDI 输出(KeySax 原文)。
静态部署与源代码
链接到“静态部署与源代码”一节作者把 KeySax 描述为托管在 GitHub Pages 上的静态 PWA。源代码采用 MIT 许可证发布,文章称 docs/ 文件夹本身就是应用。按照原文,贡献者无需处理构建步骤;作者邀请读者克隆仓库、修改簧片或添加音色,然后提交 pull request(KeySax 原文)。
文章中的实现摘要点名了 service worker、Web Audio graph、canvas stream 上的 MediaRecorder,以及可选 MIDI 输出。文章还表示偏好使用 localStorage,并且 KeySax 没有服务器(KeySax 原文)。
音频与录制路径背后的标准
链接到“音频与录制路径背后的标准”一节Web Audio 规范把 AudioContext 定义为包含音频信号图的对象。规范把 AudioNode 描述为图中的音频源、输出端和中间处理模块,并规定这些节点可以动态连接。规范还把 OscillatorNode 定义为生成周期波形的音频源,并明确称振荡器是音频合成的基础构件。它可以使用常见波形,也可以通过 PeriodicWave 使用任意周期波形(Web Audio API)。
这些定义说明了 KeySax 作者所称 Web Audio graph 在平台标准中的含义:音频源、处理模块和输出端用节点连接组成处理图。规范本身并不能证明 KeySax 使用了哪些节点类型、采用怎样的连接拓扑,或为两种萨克斯引擎选择了哪些合成参数。因此,只有作者明确披露的 Web Audio graph 算作实现信息;原文没有列出的节点拓扑和合成参数仍保留在待核实列表中(Web Audio API;KeySax 原文)。
MediaStream Recording 规范把 MediaRecorder 定义为对 MediaStream 中的轨道录制,并把收集的数据交付为 Blob。规范还规定,当录制所用的容器与编解码器没有完全指定时,用户代理可以选择具体配置;录制开始后,mimeType 会反映实际配置。这个标准边界解释了为什么仅凭 KeySax 使用 MediaRecorder,不能推出其完整应用视频在每个浏览器中使用何种容器或编解码器(MediaStream Recording)。
该录制规范也定义了停止、数据可用与错误等事件,并列出轨道集合发生变化、隔离属性改变或用户代理无法继续收集数据时的处理步骤。这些是 MediaRecorder 的通用行为;KeySax 是否为这些情况提供额外界面或恢复逻辑,作者没有说明(MediaStream Recording)。
浏览器合成声音对演奏与录制的意义
链接到“浏览器合成声音对演奏与录制的意义”一节作者希望 KeySax 成为一种可以安装、全屏演奏并留在用户机器上的乐器。文章把它描述为托管在 GitHub Pages 上的静态 PWA;声音在浏览器中合成,偏好保存在 localStorage(KeySax 原文)。
文章点名了 Web Audio graph、下落字母,以及字母片段、完整应用视频和 WAV 文件等录制输出。它还把 canvas stream 上的 MediaRecorder 列为一项实现细节(KeySax 原文)。
每一行都能有自己的音色、八度与移调值,数字小键盘默认对应鼓,空格键会触发低音重击。文章还打印了一段使用主行的《生日快乐》按键序列,采用以 C 为根音的 YouTube 音阶(KeySax 原文)。
源代码采用 MIT 许可证发布。作者把 docs/ 目录指为应用本身,表示没有需要管理的构建步骤,并点名了 service worker、Web Audio graph、canvas stream 上的 MediaRecorder 和可选 MIDI 输出(KeySax 原文)。
站内相关条目
链接到“站内相关条目”一节- WebAPK 安装:WebAPK 安装。
- 桌面平台:桌面平台支持。
- 按操作系统查看兼容性:各操作系统的兼容性。
待核实
链接到“待核实”一节- 用于测试所列安装入口的 Chrome、Edge、Safari、macOS、iOS 与 iPadOS 版本尚未确认。
- 首次加载后哪些应用资源仍然可离线使用尚未确认。
- 不同设备上的音频延迟与复音上限尚未确认。
- 完整应用视频下载所用的编解码器与容器格式尚未确认。
- 每种录制输出以及可选 MIDI 目标的浏览器支持范围尚未确认。
localStorage中偏好的持久化与迁移行为尚未确认。- 不通过实体键盘演奏的用户会获得怎样的无障碍体验尚未确认。
- 加法合成与簧片波导两种萨克斯引擎的具体合成参数尚未确认。
参考来源
链接到“参考来源”一节- KeySax, your keyboard is a saxophone(dev.to)
- Web Audio API(W3C)
- MediaStream Recording(W3C)