在C#开发中,文字转语音功能可以通过.NET框架内置的System.Speech类库实现,该类库提供了完整的语音合成能力,不需要依赖第三方组件,使用起来非常便捷。

环境准备
System.Speech类库属于.NET Framework的一部分,在.NET Core和.NET 5及以上版本中需要额外安装对应的NuGet包。如果是.NET Framework项目,默认已经包含相关引用,只需要手动添加程序集引用即可。
.NET Framework项目配置
在Visual Studio中右键点击项目下的引用选项,选择添加引用,在程序集列表中找到System.Speech,勾选后点击确定即可完成引用添加。
.NET Core/.NET 5+项目配置
这类项目需要通过NuGet安装System.Speech.Synthesis包,在NuGet包管理器中搜索该包并安装,安装完成后即可使用相关类。
核心类介绍
实现文字转语音的核心类是SpeechSynthesizer,它位于System.Speech.Synthesis命名空间下,主要负责控制语音合成的过程,包括设置语音参数、触发语音播报、暂停恢复等操作。
基础文字转语音实现
下面是一个最简单的文字转语音示例,实现将指定文本转换为语音并播放:
using System;
using System.Speech.Synthesis;
namespace TextToSpeechDemo
{
class Program
{
static void Main(string[] args)
{
// 创建语音合成器实例
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
// 设置语音输出方式为默认音频设备播放
synth.SetOutputToDefaultAudioDevice();
// 要转换为语音的文本内容
string textToSpeak = "欢迎使用C#文字转语音功能,这是一个基础示例。";
// 执行语音合成并播放
synth.Speak(textToSpeak);
}
Console.WriteLine("语音播报完成");
}
}
}
上述代码中,首先创建了SpeechSynthesizer实例,然后通过SetOutputToDefaultAudioDevice方法设置语音输出到默认音频设备,最后调用Speak方法传入要转换的文本,即可完成语音播报。Speak方法是同步执行的,会等待语音播报完成后才继续执行后续代码。
常用参数调整
实际使用中可以根据需求调整语音的相关参数,比如语速、音量、选择不同的语音角色等。
调整语速和音量
SpeechSynthesizer提供了Rate属性调整语速,取值范围是-10到10,数值越大语速越快;Volume属性调整音量,取值范围是0到100,数值越大音量越高。
using System;
using System.Speech.Synthesis;
namespace TextToSpeechDemo
{
class Program
{
static void Main(string[] args)
{
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SetOutputToDefaultAudioDevice();
// 设置语速为5,比默认语速稍快
synth.Rate = 5;
// 设置音量为80
synth.Volume = 80;
string textToSpeak = "当前语速已调整为较快状态,音量设置为百分之八十。";
synth.Speak(textToSpeak);
}
}
}
}
选择语音角色
系统可能安装了多个语音角色,比如男声、女声,不同语言版本的语音等,可以通过GetInstalledVoices方法获取所有已安装的语音,然后选择需要的语音进行设置。
using System;
using System.Speech.Synthesis;
namespace TextToSpeechDemo
{
class Program
{
static void Main(string[] args)
{
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SetOutputToDefaultAudioDevice();
// 获取所有已安装的语音
var voices = synth.GetInstalledVoices();
Console.WriteLine("已安装的语音列表:");
foreach (var voice in voices)
{
Console.WriteLine($"语音名称:{voice.VoiceInfo.Name},性别:{voice.VoiceInfo.Gender},年龄:{voice.VoiceInfo.Age}");
}
// 选择第一个语音(如果存在)
if (voices.Count > 0)
{
synth.SelectVoice(voices[0].VoiceInfo.Name);
}
string textToSpeak = "这是选择指定语音角色后的播报内容。";
synth.Speak(textToSpeak);
}
}
}
}
异步语音播报
如果需要在语音播报的同时执行其他操作,可以使用异步方法SpeakAsync,该方法不会阻塞当前线程,播报会在后台执行。
using System;
using System.Speech.Synthesis;
using System.Threading;
namespace TextToSpeechDemo
{
class Program
{
static void Main(string[] args)
{
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SetOutputToDefaultAudioDevice();
string textToSpeak = "这是异步语音播报示例,播报过程中不会阻塞主线程。";
// 异步执行语音播报
synth.SpeakAsync(textToSpeak);
// 播报的同时执行其他操作
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"主线程执行操作:{i}");
Thread.Sleep(1000);
}
// 等待异步播报完成
synth.SpeakAsyncCancelAll();
}
}
}
}
注意事项
- 如果系统没有安装对应的语音引擎,可能会导致语音合成失败,需要确保系统已安装必要的语音包。
- 在非Windows系统上使用.NET Core版本时,System.Speech的支持可能存在限制,需要确认运行环境是否兼容。
- 使用
Speak同步方法时,如果文本内容过长,会阻塞当前线程,需要根据场景选择同步或异步方法。
C#System.Speech文字转语音语音合成TTS修改时间:2026-07-10 23:18:28