ZX Spectrum 的 1-bit 蜂鸣器长期以来被视为粗糙的音频输出设备,但 Bumbershoot Software 的最新项目表明,即便是这种基本硬件也能产生出人意料的高质量数字音频。他们的技术成就并非在于创作优美的音乐,而在于证明在资源极其有限的情况下也能实现复杂的声音合成。

**The Core Challenge** ZX Spectrum 计算机的蜂鸣器电路由一个只能输出两种状态(开或关)的简单方波发生器组成。与具有专用音频硬件的现代声卡不同,Spectrum 的蜂鸣器通过 CPU 本身快速切换此输出来产生声音。根本难点在于精确控制这些转换的时序,以产生波形中的短暂中断,从而实现更精细的声音分辨率。

**Physical Principles** 如博客文章所述,关键在于理解扬声器和电路的物理特性。当 1-bit 信号发生转换时,固有的电容和扬声器质量会导致延迟。你保持信号在中间状态的时间越长,扬声器的锥体继续移动的程度就越大,从而能够对产生的声波进行更精细的控制。

**Technical Implementation** 作者的方法涉及创建一个精确的定时循环,在扬声器的开和关状态之间交替。关键的创新不仅仅是打开和关闭扬声器,而是在这些转换的精确时刻进行中断,以创建可变脉冲宽度。此技术实际上利用扬声器的惯性作为自然的低通滤波器,将数字信号平滑为可听见的音调。

**Programming the Impossible** 真正的工程挑战在于时序。为了达到 8kHz 的采样率,每个音频样本必须恰好在 125 微秒内生成。作者必须在严苛的限制下工作:寄存器有限、代码对时序极其敏感,以及在执行复杂计算时仍需保持精确的 CPU 周期。他们的解决方案涉及复杂的寄存器管理、影子寄存器交换以及高度优化的汇编语言例程。

**Overcoming Hardware Limitations** 一个主要限制是 Spectrum 的 32KB 内存限制。在 16kHz 下,一个体面质量的音频样本大约需要 40KB 内存——远超硬件能力。作者通过将每个脉冲发送两次来解决这个问题,实际上在不增加内存需求的情况下提升了感知质量。

**Verification and Real-World Testing** 博客文章包含了对原始 Spectrum 硬件及现代克隆机的硬件验证。这种双重方法确保该技术在平台的不同代上都能有效工作,解决了纯软件方案常见的可靠性问题。

**The Broader Context** 这项工作符合 8-bit 音频创新的悠久传统。早期的 DOS 游戏如《Eric the Unready》和《Star Control II》使用了类似的 PC 扬声器技术,而更先进的系统如 Amiga 则展示了专用声音硬件能够实现什么。Spectrum 的限制并不是根本的设计缺陷,而是一种考验深刻技术理解的挑战。

**Impact and Applications** 尽管由于输出音量低和内存需求高,该技术在现代应用中的实际价值有限,但它代表了嵌入式音频编程的一项非凡成就。此处所学到的教训适用于任何对精确时序和高效代码要求极高的资源受限环境。

作者从最初的失败到成功的旅程为所有在有限硬件资源下工作的人提供了宝贵的见解。他们的方法表明,即便是看似不可能的音频挑战,也能通过精心的工程和对底层物理及硬件限制的深刻理解来解决。

Dmitry Milk 的 CORE5 ZX Spectrum 蜂鸣器声音引擎在 GitHub 上的仓库
实现 ZX Spectrum 蜂鸣器上 1-bit 音频合成的 CORE5 声音引擎仓库github.com

Dmitry Milk 的 CORE5 仓库的开放图像,在文章的「Supporting Evidence」段落中被引用作为支持证据,讨论了在 ZX Spectrum 蜂鸣器上以 8.4 kHz 运行的五声音 1-bit 音频合成引擎。

**Supporting Evidence** 博客文章的技术深度得到了 Dmitry Milk 的 CORE5 声音引擎仓库的 corroboration,该仓库实现了类似的 1-bit 音频合成技术,使用五个独立声音在 8.4 kHz 下运行。这种外部验证证实了主要来源中描述的方法在技术上是可靠的,并在 demoscene 社区中具有实际应用。

这项工作证明,当技术好奇心与工程严谨相遇时,可以实现什么,表明限制往往能激发最优雅的解决方案。