使用 Windows 内置的 TTS 引擎
balcon (Balabolka)
推荐使用 Balabolka 这个工具
balcon -t "Hello, World"
balcon -id 0x0804 -t "你好,世界"
balcon -id 0x0804 -f file.txt
balcon -l # 查看系统安装的 TTS 语音引擎列表
Windows 内置的 TTS 引擎:
"Microsoft David Desktop" - Adult,Male,en-US。Windows 11 en-US 版初始内置。
"Microsoft Zira Desktop" - Adult,Female,en-US。Windows 11 en-US 版初始内置。
"Microsoft Huihui Desktop" - Adult,Female,zh-CN。在 Settings - Language - 增加 Chinese (Simplified, China) 语言并下载安装 "Speech" 数据。
- -id: 微软 Windows 的语言编码(Locale ID)。不指定则使用默认。
- 0x0804 : zh-CN, PRC
- 0x0404 : zh-TW, Taiwan
- 0x0411 : ja-JP, Japan
- 0x0409 : en-US, United States
- -n "Microsoft Huihui Desktop" : 直接指定使用某个 TTS 引擎。
- -f file.txt : 指定文本文件作为输入。文本文件编码可以是 UTF-8 with BOM 或 UTF-16 LE/BE with BOM,即必须带 BOM。
注:
- balcon 命令会 block 直到 TTS 把语音说完。
- "Microsoft David Desktop" (Windows 11 en-US 默认 TTS) 无法说中文,直接无声。
- "Microsoft Huihui Desktop" 等 zh-CN 的 TTS 可以"说" English,但是发音是按字母的标准发音规则,并不准确。
voice.exe
voice.exe -l # list available tts
voice.exe -v 100 "Hello World"
voice.exe -n "Microsoft Huihui Desktop" "你好,世界"
- -v volume : 音量(0-100)
- -n name : 指定 TTS 名称
远程播放 Windows TTS
在 Linux 机器上使用 ssh 远程连接 Windows 的 OpenSSH Server 并播放 TTS:
say.sh
#!/bin/sh
IP=192.168.1.40
COMMAND="voice.exe -n \"Microsoft Huihui Desktop\" $1"
ssh -t $IP "$COMMAND"
say.sh "Hello, World"
注意:
- 用 ssh host command 这种方式远程连接到 Windows 的 OpenSSH Server 然后用 voice.exe / balcon 播放声音时必须指定 -t 参数。否则会有问题(如果不加 -t, voice.exe 执行时直接卡住;而 balcon 命令执行成功但实际无声)。
- 推荐使用 voice.exe。测试 balcon 在某些环境(说的就是 OpenWrt 里那个弱智 dropbear 带的 ssh client)的 ssh 里运行时会有问题,命令成功执行,但是实际没有声音(ssh 已经加了 -t 参数)。