一比特声音工坊
复古游戏音乐人编写 1-bit 配乐时,可边听边处理处理器周期超支,直接导出真机代码。
给 ZX Spectrum 这类早期家用电脑写配乐的人,必须用极少的处理器时间控制蜂鸣器发声。一段旋律稍微复杂,就可能抢走游戏逻辑需要的计算时间。创作者在浏览器里选择真机型号或模拟器参数后,把音符、节奏和音色变化排进一条可试听的时间线。
时间线的最小格子不是普通乐谱拍子,而是处理器实际执行指令的周期。创作者拖动一段节奏时,界面立刻显示这段会占用多少周期、蜂鸣器会怎样翻转,以及角色移动或画面刷新可能在哪些位置受阻。超出预算的段落会以波形和听感同时暴露出来。
游戏程序员可以把某段节奏冻结成机器码乐句,附带所需周期和调用条件。音乐人随后调整旋律,系统会标出哪些代码段需要重新导出。项目页还能并排试听模拟器输出与真机录音,收集不同硬件上的失真差异。
产品先支持单声道蜂鸣器、短循环音乐和可直接嵌入的汇编代码导出。重点是让创作者边听边处理硬件限制,复杂的多芯片音频编曲留给后续版本。
为什么是现在
9 月 5 日的实验文章把蜂鸣器写入、延迟和走调拆到具体指令周期。S1 9 月 9 日观测时,它在 Hacker News 新品流第 16 位,获 91 points 和 26 comments,让更多复古开发者正面碰到“声音与游戏逻辑争用周期”的问题。S2
目标用户
核心用户是给 ZX Spectrum 48K 游戏或演示写蜂鸣器音乐的人。他们通常在旋律已能播放,却需要塞进游戏主循环时遇到问题。此时每段乐句都会与输入、角色移动和画面更新争夺周期。音乐人与程序员还可能是两个人,需要共享可复现的周期清单,而不只是音频文件。
最小切入点
浏览器端先锁定 ZX Spectrum 48K 与单声道蜂鸣器。用 JSSpeccy 3 的 WebAssembly 架构承载 Z80、画面与音频执行。S3 编辑层只处理短循环、音符时值和端口翻转事件。每次修改后,记录指令 T-state、端口写入与帧边界。周期预算先允许程序员手工填写,不推测完整游戏负载。导出交给 sjasmplus,生成可读汇编、机器码和周期清单。S4 首版不接多芯片编曲,也不承诺模拟器与所有真机完全同声。
以小博大
首批用户集中在 ZX Spectrum 复古开发社区、demoparty 和 1-bit 音乐圈。可发布几组同一乐句的周期时间线、模拟输出与真机录音,附可下载工程。再把导出的短循环提交给现有开源游戏或比赛作品,形成可核验样例。围绕具体引擎制作导入模板,比泛泛宣传“浏览器编曲”更容易获得试用。
竞品与缝隙
- BeepolaGoogle
- Beepola 已能用传统 tracker 网格编写 ZX Spectrum 48K 蜂鸣器音乐。它内置多种历史与现代播放引擎,还能编译歌曲并导出汇编代码。对熟悉 pattern、engine 和 Z80 工具链的人,这条流程已经足够成熟。它的核心抽象仍是音符、效果列和播放引擎,而不是逐段展示指令周期。创作者通常要编译后,再到模拟器或程序中判断卡顿。不同乐句对主循环、画面刷新和输入扫描的影响,没有与声音放在同一时间线上。可切入的缝隙是把周期预算变成直接可编辑的音乐约束。导出时再附上调用条件和受影响代码段,减少音乐人与程序员之间的反复试错。
- BintrackerGoogle
- Bintracker 是可编程的芯片音乐工作站,支持 ZX Spectrum 蜂鸣器等多种平台和引擎。它采用 MAME 作为模拟后端,可导出二进制、汇编和 ZX Spectrum TAP。插件、MDAL 抽象和内置命令环境,使它适合研究新引擎。现有产品仍以通用 tracker 和引擎适配为中心,配置与扩展能力较重。它没有把某段旋律占用的 Z80 周期,直接映射到游戏主循环。音乐人也难以在拖动节奏时,看见蜂鸣器翻转与画面受阻位置。其覆盖平台很广,反而给专做 48K 单声道工作流留下空间。这个产品可把试听、周期诊断和可嵌入代码收进一个较窄流程。代价是引擎数量和编曲自由度短期内会明显少于 Bintracker。
怎么赚钱
采用个人版一次性买断,包含浏览器编辑器、离线项目和汇编导出。真机对照、团队项目共享与更多机型适配,可另设年度升级包。
反方视角
逐指令周期预览很容易给出虚假的确定性。内存争用、中断、代码装载地址和自修改代码,都会改变实际时序。若编辑器只测独立乐句,嵌入游戏后仍可能卡顿或走调。要提高可信度,就得接入完整程序快照和调用上下文,工程复杂度会迅速上升。真机录音还受机器版本、音频采集链和音量处理影响,难以自动判定差异来源。用户群本身较窄,许多老手已有 tracker、汇编器和模拟器组合。若周期诊断不能明显减少往返测试,他们不会为了更漂亮的时间线迁移。