system.speech.synthesis仅支持.net framework,需手动安装中文语音包、显式指定utf8编码、预处理换行符,并调用setoutputtowavefile保存wav;.net core/5+及以上不支持,应改用microsoft.cognitiveservices.speech sdk。

怎么用 System.Speech.Synthesis 读文件并转语音
Windows 自带的 TTS 引擎最省事,不用装第三方库,但只支持 .NET Framework(.NET Core / .NET 5+ 默认不包含)。读取文本文件后直接喂给 SpeechSynthesizer 就行,关键在编码和换行处理。
-
File.ReadAllText(path, Encoding.UTF8)推荐显式指定编码,避免 ANSI 文件乱码(尤其含中文时) - 合成前调用
synth.SetOutputToWaveFile(outputPath)才能保存为 WAV;不设则默认播到扬声器 - 长文本建议分段调用
SpeakAsync(),否则 UI 线程卡死(WinForms/WPF 中尤其明显) - 若遇到
InvalidOperationException: "The specified voice is not installed",说明系统没启用对应语言语音包(如中文需手动在“设置 > 时间和语言 > 语音”中安装)
.NET 6+ 项目里为什么 System.Speech 找不到
因为微软从 .NET Core 开始移除了该命名空间,它被标记为 Windows-only 且不再维护。硬要跨平台或用新 SDK,得换方案。
- 改用
Microsoft.CognitiveServices.SpeechSDK:支持在线语音合成(需 Azure 订阅密钥),跨平台,音质更好 - 本地替代极有限:
Windows.Media.SpeechSynthesis(UWP)或通过 COM 调用 SAPI(麻烦且不稳定) - 别试图用
dotnet add package System.Speech—— 官方 NuGet 包只是空壳,运行时报FileNotFoundException
用 SpeechSynthesizer 选不到中文声音?
不是代码问题,是系统层缺组件。Windows 10/11 默认只装英文语音,中文需手动启用或下载。
- 检查已安装语音:运行
synth.GetInstalledVoices().Select(v => v.VoiceInfo.Name),输出不含Zh-CN相关名字就确认缺失 - 控制面板路径:
设置 > 时间和语言 > 语言 > 中文(简体,中国) > 选项 > 下载语音(选“Microsoft XiaoYun-Online”或离线版) - 离线语音包名是
Microsoft Zira Desktop(英文)或Microsoft Huihui Desktop(旧版中文),新版叫Microsoft Yaoyao等,名称不统一,以系统实际显示为准
合成音频无声或断句错乱怎么办
常见于特殊符号、空行、制表符混入文本,TTS 引擎解析时直接跳过或报错静音。
- 预处理文本:用
text.Replace("\r\n", "。").Replace("\n", "。").Replace("\t", " ")避免换行干扰(句号是较安全的停顿符) - 禁用 SSML 标签除非明确需要:比如误写
<speak></speak>但没引用命名空间,会导致整个合成失败静音 - 检查音频输出设备权限:Win11 某些版本下,后台应用默认禁用音频输出,需在
设置 > 隐私和安全性 > 麦克风 > 应用权限中打开“允许应用访问麦克风”(TTS 同样受此策略影响)










