C# 语音合成

微软MS的文本转语音

1. 引用System.Speech

2. 通过SpeechSynthesizer类朗读文本

new SpeechSynthesizer().SpeakAsync("我们都是好孩子We're good kids.")

3. Speck vs SpeckAsync函数

  • PlayAsync--异步播放,可以将需要朗读的文本进行排队。如果不需要,可以按如下取消当前的播放操作。
  • Speak--同步播放,会卡UI线程。如果在朗读时,界面没有其它操作,则可以使用此函数
         private SpeechSynthesizer speechSyn=new SpeechSynthesizer();
/// <summary>
/// 异步播放
/// </summary>
private void PlayAsync()
{
var currentSpokenPrompt = speechSyn.GetCurrentlySpokenPrompt();
if (currentSpokenPrompt != null)
{
speechSyn.SpeakAsyncCancel(currentSpokenPrompt);
}
speechSyn.SpeakAsync(richTextBox1.Text);
}
/// <summary>
/// 同步播放
/// 注:卡UI
/// </summary>
private void Play()
{
using (SpeechSynthesizer speechSyn = new SpeechSynthesizer())
{
speechSyn.Speak(richTextBox1.Text);
}
}

4. 设置朗读角色

     var speechSynthesizer = new SpeechSynthesizer();
var voices= speechSynthesizer.GetInstalledVoices(CultureInfo.CurrentCulture).Select(x => x.VoiceInfo.Name).ToList();
speechSynthesizer.SelectVoice(voices[]);
speechSynthesizer.SpeakAsync("我们都是好孩子We're good kids.");

5. 其它

  • Rate -- 语速设置,默认为0
  • Volume -- 音量设置

6. 导出音频文件

可以将文本语音合成后,导出成一个wav、mp3等音频文件。

         private void ExportAudioFile()
{
using (SpeechSynthesizer speechSyn = new SpeechSynthesizer())
{
speechSyn.Volume = ;
speechSyn.Rate = ; var filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $"\\{richTextBox1.Text}.mp3";
if (File.Exists(filePath))
{
File.Delete(filePath);
} speechSyn.SetOutputToWaveFile(filePath);
speechSyn.Speak(richTextBox1.Text);
speechSyn.SetOutputToDefaultAudioDevice(); MessageBox.Show($"保存录音文件成功,保存路径:{filePath}");
}
}

Demo下载

第三方的语音合成接口

如果是英文朗读的话,有道的效果最好。可以下载Demo体验下

上一篇:ROS节点中创建msg和srv文件(kinetic/melodic)


下一篇:nagios二次开发(五岁以下儿童)---nagios和nagiosql关系