← 返回信息流
AI 资讯Hacker News·3 天前

SaySynth:说话机器的简史

原标题:SaySynth: A Brief History of Speaking Machines

速览

SaySynth是一个回顾说话机器发展历史的项目。它展示了从早期机械发声装置到现代语音合成技术的演变过程。这一历史回顾有助于理解语音交互技术的起源与进步。

AI 深度解读

SaySynth:说话机器的简史与声音合成的另类探索

背景

这篇文章源自作者于 2025 年 12 月 21 日在 composition.codes 举办的讲座扩展笔记。作者构建了一个名为 SaySynth 的合成器,该工具基于 macOS 的文本转语音(TTS)框架——即广为人知的 say 命令。

为了阐明构建 SaySynth 的初衷及其重要性,作者并未直接切入技术细节,而是通过回顾“说话机器”(Speaking Machines)的广义历史,梳理了从机械装置到现代 AI 语音合成的演变脉络。文章旨在揭示语音合成技术背后的设计哲学、文化偏见以及被忽视的人类劳动,并最终展示如何通过“误用”现有的 TTS 工具,将其转化为一种具有表现力的音乐合成手段。

核心内容

说话机器的类型学

历史上大致存在四种类型的说话机器:

  1. 机械式(Mechanical):纯粹的物理装置。通过风箱将空气压入簧片,利用不同的旋钮、阀门和哨声来塑造不同的共振峰(formants)和音素。人类操作员是乐器的一部分。
  2. 共振峰/基于规则式(Formant/Rule-Based):更接近现代合成器。使用振荡器和梳状滤波器模拟声道的共振形状。系统模拟语音的声学特性,而不录制任何实际的人声。
  3. 基于样本/拼接式(Sample-Based / Concatenative):从内部装有留声机的玩具到复杂的“双音素”(diphone)合成器。后者将每种可能的音素过渡录音拼接在一起。20 世纪 90 年代和 2000 年代的 GPS 语音和自动客服电话系统多采用此技术。
  4. 生成式(Generative / Neural/AI):即当今大多数人理解的 AI 语音。这本质上是基于样本系统的极端化:不再使用音素对的录音,而是由神经网络逐个预测数字音频样本。

说话机器的简史

  • 冯·肯佩伦的说话机器(1773): 这是人们通常提到的第一个说话机器。操作员推动空气通过簧片,并用手移动皮革块以模拟声道形状,同时用单独的哨声处理 S 和 T 等摩擦音。虽然粗糙,但其基本架构——振荡器源由模拟声道的结构塑造——与今天的共振峰合成器如出一辙。

  • 约瑟夫·法伯的 Euphonia(1845): 法伯在冯·肯佩伦的设计基础上进行了迭代,创造出更复杂的装置:16 个琴键,每个生成不同的音素。操作员的作用开始变得至关重要。为了让机器看起来不那么具有威胁性,法伯在机器正面安装了一张女性面孔,据报道,有时还在机器前挂上一件连衣裙。作者推测,这反而产生了适得其反的效果。

  • 爱迪生说话玩偶(1890s): 这并非传统意义上的说话机器,而是第一个拼接式合成器:一个内部装有微型留声机的玩偶,播放录制好的儿童歌谣。爱迪生认为将录音嵌入玩具能帮助人们适应这项技术,但保留下来的录音表明他错了。

  • VODER(1939): 在 1939 年世界博览会上演示的 VODER 在当时令人瞩目。它是一个单声道合成器,包含振荡器、噪声发生器和一套用于实时塑造音素的控件,音高由脚踏板控制。最有趣的是,其“令人印象深刻”的程度完全依赖于操作员——被称为“Voderettes”的女性,她们经过数年训练才能产生可理解的语音。发明者获得了所有荣誉,而操作员在历史上几乎无名。

  • MUSA - 多通道说话自动机(1978): 在意大利开发,MUSA 是最早实用的双音素合成器之一。他们甚至将结果压制成了黑胶唱片。它使用所有可能的音素过渡录音(约 2000 种组合),然后应用数字信号处理(DSP)将其平滑连接。这种方法在 90 年代和 2000 年代成为商业 TTS 的主流。

  • S.A.M. - 软件自动口(1982): 这是第一个商业可用的语音合成器,适用于 Commodore 64、Atari 和 Apple II。S.A.M. 的显著特点是向用户暴露了音高、速度和语调的控制选项。制造该公司的后来提供了 Macintosh 的 Macintalk 背后的技术——这也是故事变得“个人化”的地方。

两个 recurring patterns( recurring patterns 指反复出现的模式)

在继续之前,值得注意贯穿这段历史的两个现象:

  1. 唱歌作为演示:说话机器经常通过唱歌来演示。从《2001 太空漫游》中的 HAL 9000 唱《Daisy Bell》到 Siri 唱歌,唱歌始终是 TTS 的最终概念验证,因为它迫使系统处理音高变化、节奏和表现力。但这隐含了一个主张:唱歌是人类语言表达的巅峰,除非能唱歌,否则说话机器就不算真正“人性化”。
  2. 文化偏见的编码:说话机器编码了生产它们的文化偏见。法伯给 Euphonia 加上女性面孔以使其显得不那么具威胁性;Voderettes 训练多年却如今被遗忘;大多数 AI 助手默认被赋予女性特征。这并非偶然,它反映了一种持续且令人不安的模式:我们试图通过女性化机器来使其显得亲切,同时使背后的实际人类劳动变得隐形。

Macintalk 与 say 命令

1984 年,Apple 发布了 Macintalk,这是一个基于共振峰的 TTS 系统。在发布时,Steve Jobs 让 Mac 自我介绍,这一演示引发了集体的狂喜,如今回想起来,这种反应甚至显得有些尴尬。

如果你在 90 年代拥有 Apple 电脑,你可能记得玩过 Bad News、Cellos、Bubbles、Whisper 或 Princess 等声音。2001 年,随着 Mac OS X (Cheetah) 的发布,Apple 为此功能添加了命令行接口:

say -v Fred "I sure like being inside this fancy computer"

大多数人不知道的是,say(以及底层的语音框架)拥有一个隐藏的、低级别的 DSL(领域特定语言),用于在音素级别控制韵律(prosody)。其语法如下:

[[inpt TUNE]]
~
AA {D 120; P 176.9:0 171.4:22 161.7:61}
r {D 60; P 166.7:0}
~
y {D 210; P 161.0:0}
UW {D 70; P 178.5:0}
_
S {D 290; P 173.3:0 178.2:8 184.9:19 222.9:81}
...
[[inpt TEXT]]

每个音素都可以分配一个持续时间(D,以毫秒为单位)和一个音高曲线(P,作为位置-频率对)。上述片段大致是将“are you brushing your teeth?”分解为其组成声音,然后用明确的时间和音高重新组合。你可以从中获得惊人的表现力——虽然听起来不自然,但在另一种方式上具有表现力。

作者未能找到其他人使用这种语法的例子。它曾记录在归档的 Apple 开发者网站上,现已弃用并从当前 macOS 中移除(这也是为什么演示时需要带一台旧 Mac mini 的原因)。

SaySynth 的实现

SaySynth 的洞察很简单:如果你可以在 say DSL 中指定每个音素的音高,你就可以将其用作合成器。不是试图产生可理解的语音,而是将工具推向它从未被设计去的方向。

作者没有手动编写原始 DSL,而是基于它构建了一个基于 YAML 的序列器。以下是一段名为“fire”的作品的摘录:

name: fire
globals:
  start_bpm: 65
  rate: 160
查看原文 →brian.abelson.live