当前位置: 首页 > news >正文

【C#语音文字互转】.NET的TTS文本转语音合成

官方文档给出环境为Visual Studio 2017及以上;C#SDK为.NET4.8及以上
本文章环境介绍:
Visual Studio 2022;C#SDK为.NET6.0
语音转文字请移步:【C#语音文字互转】C#语音转文字(方法一)

一. 启动 Visual Studio 并创建控制台应用程序

1.1 首先在项目打开NuGet包管理工具下载System.Speech

在这里插入图片描述

1.2测试

下面为一个典型的输出示例

using System.Speech.Synthesis;
namespace KeepTalking
{class Program{static void Main(string[] args){var synthesizer = new SpeechSynthesizer();synthesizer.SetOutputToDefaultAudioDevice();synthesizer.Speak("支付宝到账一百万元");}}
}

注意,需要有音频输出设备。运行该示例即可听到语音输出。

二. 声音选择

2.1 列出可选语音

将下面代码放入SpeechSynthesizer实例化后

foreach (var voice in synthesizer.GetInstalledVoices())
{var info = voice.VoiceInfo;Console.WriteLine($"Id: {info.Id} | Name: {info.Name} | Age: { info.Age} | Gender: { info.Gender} | Culture: { info.Culture}");
}

运行后输出:
在这里插入图片描述
只有两个英语语音可用,这是windows默认自带语音,如何选择其他语音。

2.2 下载本地语音包

导航到“设置”|“时间和语言”|“语言和区域”,然后单击“添加语言”,确保在可选功能中选择“语音”。
在这里插入图片描述
下面以中文为例,其他语言可以点击添加语言。

2.3 手动设置声音输出

在代码中加入

synthesizer.SelectVoice("Microsoft Huihui Desktop");

三. 增强内容输入

3.1 SSMl简介

该TTS框架支持语音合成标记语言(SSML)的格式输入。SSML(Speech Synthesis Markup Language)是一种基于XML的标记语言,用于在文本到语音(TTS)系统中控制发音和语调等增强自然度。具体格式定义详见W3C SSML (www.w3.org/TR/speech-synthesis)。

常用SSML提升语音合成自然度的技巧:

  • 适当的停顿:<break time=“1s”/> 标签可以用来在句子或短语之间添加适当的停顿。
  • 控制语速:<prosody rate=“…”> 可以调整文本的朗读速度。rate 属性可以设置为更快或更慢的值。
  • 调节音量:<prosody volume=“…”> 可以用来增加或减少特定文本段的音量。
  • 调整音高:<prosody pitch=“…”> 可以用于调整文本段的音高。
  • 强调重要词语:<emphasis> 标签可以用来强调文本中的某些词语或短语。
  • 合适的语调:<say-as interpret-as=“…”> 可以用来指示语音合成引擎以特定的方式朗读文本,例如数字、日期、时间等。
  • 朗读不同的角色:<voice name=“…”> 可以指定使用不同的声音类型来朗读文本,如男性或女性声音。
  • 适当的标点符号:SSML支持标点符号的自然朗读,如问号(?)、感叹号(!)等。
  • 控制段落和句子的朗读: <p> 用于段落,<s> 用于句子,这有助于语音合成引擎理解文本的结构。
  • 使用电话区号和扩展:<phoneme alphabet=“…” ph=“…”> 可以指定精确的发音,特别是对于缩写或特殊术语。
  • 使用子元素来细化控制:<sub alias=“…”> 可以用来定义一个别名,以便在文本中插入非标准单词或短语的特定发音。
  • 利用描述来提供额外信息:<desc> 标签可以用来为合成器提供额外的上下文信息。
  • 使用连接元素:<connect> 可以用来在文本中定义连读的点,这对于保持自然流畅的语音非常重要。

3.2 示例

using System.Reflection;
using System.Speech.Synthesis;
using System.Text.RegularExpressions;
namespace KeepTalking
{class Program{static void Main(string[] args){var synthesizer = new SpeechSynthesizer();var savedPrompt = new PromptBuilder();savedPrompt.AppendSsml("C:\\Users\\26366\\Desktop\\1.xml");synthesizer.Speak(savedPrompt);}}
}

其中1.xml

<?xml version="1.0" encoding="UTF-8"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="zh-cn"><p>静夜思</p><s>床前明月光,</s><s>疑是地上霜。</s><p>举头望明月,</p><s>低头思故乡。</s><!-- 添加适当的停顿 --><break time="1s"/><p>啊 !在这宁静的月光下,思绪飘向远方的<emphasis>家乡</emphasis></p>
</speak>

运行,即有语音输出。

参考

  1. https://learn.microsoft.com/zh-cn/archive/msdn-magazine/2019/june/speech-text-to-speech-synthesis-in-net
  2. https://www.cnblogs.com/fx_guo/archive/2011/01/14/1935388.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java面试篇(线程池相关专题)
  • 问题解决:CUDA_HOME environment variable is not set.
  • HTTPS链接建立的过程
  • 工业除尘的一些方法
  • 简要:JVM底层原理、JVM各类垃圾收集器的使用及核心参数的调优、JVM 调优
  • Makefile自动依赖
  • package.json的 和 的区别,以及|| 和 | 的区别
  • 告别杂音,从 AI 音频降噪开始
  • 文件上传绕过最新版安全狗
  • CENTOS9+RSYSLOG+LOGROTATE收集日志
  • AI融合新突破:CNN与Transformer的强强联合!
  • 收银系统源码—多商户平台入驻商城+门店线下收银
  • 英伟达元宇宙平台Omniverse的学习,技术调研
  • 缺失值处理方法:代数/统计/机器学习算法补全数据(附Python-sklearn代码精美可视化绘图)
  • C# 事件总线 Event Bus
  • Angularjs之国际化
  • Date型的使用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js ES6 求数组的交集,并集,还有差集
  • JSONP原理
  • Markdown 语法简单说明
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 给初学者:JavaScript 中数组操作注意点
  • 前端路由实现-history
  • 前端自动化解决方案
  • 入手阿里云新服务器的部署NODE
  • 在Unity中实现一个简单的消息管理器
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 通过调用文摘列表API获取文摘
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1)(1.9) MSP (version 4.2)
  • (1)svelte 教程:hello world
  • (a /b)*c的值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (七)glDrawArry绘制
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)进入MySQL 【事务】
  • (四)模仿学习-完成后台管理页面查询
  • (算法设计与分析)第一章算法概述-习题
  • (转)Linux下编译安装log4cxx
  • (状压dp)uva 10817 Headmaster's Headache
  • .htaccess配置常用技巧
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .net wcf memory gates checking failed
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)