指南

PowerShell 文字转语音:用自然的声音

PowerShell 开箱即可说话:Windows 自带 System.Speech 合成器,几行代码就能让脚本播报备份完成或构建失败。不过那是 Windows 用了多年的机械声音,而且每台机器都不一样。请注意:Supertonic 3 暂不支持中文,可朗读英语、日语、韩语等 31 种语言。

免费的 SuperClonica 引擎在你自己的电脑或服务器上运行自然的神经网络声音,PowerShell 只需一次 Invoke-RestMethod 调用就能使用。本指南介绍两种方法,以及各自适用的场合。

在 PowerShell 中说话的两种方法

简单的提示用 System.Speech 就够了;凡是要给人听的内容,请用自然的声音。

  • System.Speech:Windows 内置;用 Add-Type -AssemblyName System.Speech 加载,并使用 SpeechSynthesizer 类。
  • 它可以离线工作,无需额外安装,但声音机械,并取决于系统安装的 Windows 语音。
  • SuperClonica:本地 HTTP 服务器,提供自然声音、角色声音和你自己训练的声音。
  • 支持 31 种语言,暂不支持中文。

免费试听声音

在任意声音页面输入脚本要说的句子,30 到 100 个字符,选择语言并点击生成按钮。几秒后就能听出区别,无需注册。

调用本地 SuperClonica 服务器

Windows PowerShell 5.1 会用错误的编码发送字符串请求体,所以要像上面那样传 UTF-8 字节;它还会把没有 BOM 的 .ps1 当作 ANSI 读取,含非拉丁文字的脚本请保存为带 BOM 的 UTF-8。

  • 只需启动一次服务器,在 Windows 上可用 Docker Desktop:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。
  • 在 PowerShell 中朗读一句话:$json = @{text='The nightly backup finished'; voice='F1'; lang='en'} | ConvertTo-Json; Invoke-RestMethod -Method Post -Uri http://localhost:8000/synthesize -ContentType 'application/json' -Body ([Text.Encoding]::UTF8.GetBytes($json)) -OutFile hello.wav。
  • 生成的是 16 位单声道 WAV,任何播放器、视频编辑器或脚本都能使用。
  • 如果其他机器也能访问服务器,请在服务器上设置 SUPERCLONICA_API_KEY,并加上 -Headers @{Authorization="Bearer 你的密钥"}。

会说话的脚本

用 (New-Object Media.SoundPlayer "hello.wav").PlaySync() 立即播放 WAV,或者把播报保存起来以后用。计划任务可以朗读晨间摘要,CI 任务可以在办公室音箱上播报构建失败,遍历 CSV 的循环可以一次生成数百条提示。在普通处理器上,短句远不到一秒。

什么时候 System.Speech 就够了

当声音只需要让人听懂、不需要好听时,System.Speech 就够了:坐在桌前时的快速提醒、无障碍测试、没有 Docker 的机器。当音频要离开你的桌面,用于视频、提示音、广播或产品,或者同一个声音需要在每台机器上听起来都一样时,请使用 SuperClonica。