目录
使用System.Speech.Synthesis在C#中实现文本到语音转换
介绍
此提示说明如何使用System.Speech.Synthesis命名空间在C#中实现文本到语音转换(TTS)应用程序。TTS技术有许多实际用例,例如辅助功能工具和支持语音的应用程序。按照提供的分步指南,读者将能够创建一个简单的控制台应用程序,该应用程序从文本合成语音。本文还提供了所用代码的说明,并提供了探索该SpeechSynthesizer类的更高级功能的建议。
使用System.Speech.Synthesis在C#中实现文本到语音转换
文本到语音转换(TTS)技术已经存在了一段时间,并且已经发现了许多用例,例如语言学习、视障人士的辅助功能工具以及支持语音的应用程序。在本文中,我们将探讨如何使用C#和System.Speech.Synthesis命名空间实现简单的TTS应用程序。
先决条件
在开始之前,您需要在计算机上安装以下内容:
- .NET Framework 4.6.1或更高版本
- Visual Studio 2017或更高版本
实现
我们将使用System.Speech.Synthesis命名空间,它提供了用于从文本合成语音的类。按照以下步骤在C#中创建控制台应用程序并实现TTS。
- 打开Visual Studio并创建一个新的控制台应用程序项目。
- 添加对System.Speech程序集的引用。在“解决方案资源管理器”中右键单击该项目,选择“添加引用”,然后从程序集列表中进行选择System.Speech。
- 在Program.cs文件中,添加以下代码:
using System;
using System.IO;
using System.Speech.Synthesis;
class Program
{
static void Main(string[] args)
{
// Basic TTS
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
synth.Speak("Hello, world!");
// Changing the Voice
synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult);
synth.Speak("Hello, I am a female voice!");
// Changing the Pitch and Rate
synth.Rate = -2;
synth.Volume = 100;
synth.Speak("Hello, I am speaking slower and louder!");
// Pausing and Resuming Speech
synth.Speak("Hello, I will pause for 3 seconds now.");
synth.Pause();
System.Threading.Thread.Sleep(3000); // wait for 3 seconds
synth.Resume();
synth.Speak("I am back!");
// Saving Speech to a WAV File
synth.SetOutputToWaveFile("output.wav");
synth.Speak("Hello, I am saving my speech to a WAV file!");
// Setting the Speech Stream
MemoryStream stream = new MemoryStream();
synth.SetOutputToWaveStream(stream);
synth.Speak("Hello, I am being streamed to a memory stream!");
byte[] speechBytes = stream.GetBuffer();
// Changing the Voice and Pronunciation
PromptBuilder builder = new PromptBuilder();
builder.StartVoice(VoiceGender.Female, VoiceAge.Adult, 1);
builder.AppendText("Hello, my name is Emily.");
builder.StartVoice(VoiceGender.Female, VoiceAge.Teen, 2);
builder.AppendText("I am from New York City.");
builder.StartStyle(new PromptStyle() { Emphasis = PromptEmphasis.Strong });
builder.AppendText("I really love chocolate!");
builder.EndStyle();
builder.StartStyle(new PromptStyle() { Emphasis = PromptEmphasis.Reduced });
builder.AppendText("But I'm allergic to it...");
builder.EndStyle();
synth.Speak(builder);
Console.ReadLine();
}
}
代码大纲
1、基本TTS
创建一个SpeechSynthesizer实例并使用默认音频设备合成文本“Hello, world!”。
2、改变声音
选择成人女性声音并使用该声音合成文本“Hello, I am a female voice!”。
3、改变音高和速率
将语速设置为-2(较慢),将音量设置为100(较响),并合成文本“Hello, I am speaking slower and louder!”。
4、暂停和恢复语音
合成文本“Hello, I will pause for 3 seconds now.”,暂停语音3秒钟,然后恢复语音并合成文本 “I am back!”。
5、将语音保存到WAV文件
将SpeechSynthesizer的输出设置为名为“output.wav”的WAV文件,并合成文本“Hello, I am saving my speech to a WAV file!”。
6、设置语音流
将SpeechSynthesizer的输出设置为内存流,合成文本“Hello, I am being streamed to a memory stream!”,并从内存流中获取生成的语音字节。
7、改变声音和发音
使用该PromptBuilder类创建更复杂的提示,更改提示的某些部分的语音,并向提示的某些部分添加强调和减少强调。然后使用SpeechSynthesizer合成生成的提示符。
这些代码示例演示了SpeechSynthesizer类的一些基本和高级功能,包括更改语音和音调、暂停和恢复语音以及将合成语音保存到文件或内存流。
https://www.codeproject.com/Tips/5357005/Implementing-Text-to-Speech-in-Csharp-using-System