【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392900.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OceanBase系列】—— OceanBase应急三板斧

作者&#xff1a; 花名&#xff1a;洪波&#xff0c; OceanBase 数据库解决方案架构师 目前随着OceanBase数据库越来越流行&#xff0c;社区已经有很多用户在生产环境使用了OceanBase&#xff0c;也有不少用户的核心业务用到了OceanBase数据库&#xff0c;在使用OceanBase数据库…

新址·新征程|美创科技北京中心喜迎乔迁

7月30日&#xff0c;北京暴雨倾城 连绵大雨和隆隆雷声 却像是在为一场新征程洗礼 这一天&#xff0c;我们迎来了重要的时刻 ——美创科技北京中心搬新家啦&#xff01; 新址&#xff1a;北京市海淀区庚坊国际大厦6层 喜迎新址&#xff0c;一场简单但喜气盈盈、温馨十足的乔…

【Python学习手册(第四版)】学习笔记16-函数基础

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍Python中函数的基本概念&#xff0c;作用域以及参数传递&#xff0c;函数语法以及def和return语句的操作&#xff0c;函数调用表达式的行为&#xff…

Delphi5实现DLL的编写、调用

效果图 显式跟隐式调用差不多的&#xff0c;就重新画了窗体&#xff0c;画的有点粗糙。 DLL文件 DLL文件是一种包含了可执行代码的库文件&#xff0c;但它不能独立运行&#xff0c;必须由其他程序&#xff08;如EXE文件&#xff09;显式或隐式地加载并调用。DLL文件通常用于实…

全国地铁路线及站点SHP数据

数据是GIS的血液&#xff01; 我们在《126M全球手机基站SHP数据分享》一文中&#xff0c;为你分享过全球手机基站分布数据。 现在再为你分享全国地铁轻轨路线与站点SHP数据&#xff0c;你可以在文末查看该数据的领取方法。 全球地铁路线及站点数据 截至2023年12月31日&…

LAVIS在Mac,M1PRO芯片下的安装实战

LAVIS在Mac,M1PRO芯片下的安装实战 契机 ⚙ 本地想装个图片理解的大模型&#xff0c;看了下blip2感觉比较合适&#xff0c;macos安装的时候有点坑需要注意下&#xff0c;但是最终也无法使用mps加速&#xff0c;比较蛋疼。这里记录下安装步骤。 安装 LAVIS/projects/blip2 a…

【研发日记】Matlab/Simulink技能解锁(十二)——Stateflow中的两种状态机嵌套对比

文章目录 前言 项目背景 两级状态机 函数状态机 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真》 见《【研发日记】Matlab/Simulink技能解锁(九)——基…

数据结构(其四)--特殊矩阵的存储

目录 11.特殊矩阵的压缩存储 &#xff08;1&#xff09;.一维数组的储存结构 &#xff08;2&#xff09;.二维数组的存储结构 &#xff08;3&#xff09;.普通矩阵的存储 &#xff08;4&#xff09;.特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…

Java多商户新零售超市外卖商品系统

解锁新零售奥秘&#xff0c;多商户外卖超市商品系统大揭秘&#xff01; &#x1f31f; 开篇&#xff1a;新零售时代的浪潮 在这个日新月异的数字化时代&#xff0c;新零售已悄然成为商业变革的新风口。想象一下&#xff0c;足不出户就能逛遍全城商家&#xff0c;心仪商品一键…

力扣——238.移动零

题目 思路 利用双指针&#xff0c;先找到第一个为0的地方指向&#xff0c;指针2指向下一个&#xff0c;指针1之前是已经处理好的数据&#xff0c;指针2进行遍历&#xff0c;遇到非零则与指针1数据交换&#xff0c;然后指针1。 代码 class Solution { public:void moveZeroes(…

离心机转子适配器容量转换器的作用

离心机转子是离心机的核心部件&#xff0c;离心机中的所有系统都配置为保证转子在一定条件下安全运行。转子不仅直接影响分离效果&#xff0c;而且也是离心机技术中的主要承力部件&#xff0c;对离心机的安全性极为重要。 简而言之&#xff0c;离心机可分为两部分&#xff1a;…

Java Web——第二天

什么是JavaScript? JavaScript(简称:JS) 是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript和Java是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似 JavaScript在1995年由 Brendan Eich 发明&#xff0c;…

【MySQL】索引概念解析

1.什么是索引&#xff1f; MySQL中的索引是一种数据结构&#xff0c;用于帮助MySQL数据库管理系统快速查询数据。索引的主要目的是提高数据检索的速度&#xff0c;减少数据库系统需要扫描的数据量。 优点&#xff1a; 索引可以极大的提高数据检索效率&#xff0c;降低数据库…

C语言——预处理和指针

C语言——预处理和指针 预处理宏宏定义宏的作用域带参的宏 文件包含条件编译 指针指针的概念指针的定义 预处理 编程的流程分为&#xff1a;编辑、编译、运行、调试四个阶段&#xff1b; 预处理属于编译阶段&#xff0c;编译过程又可以分为&#xff1a;预处理、编译、汇编、链…

TikTok达人效应:品牌出海中的文化桥梁与本土化策略

在全球化的浪潮下&#xff0c;品牌出海已成为企业拓展市场的必经之路。然而&#xff0c;跨越文化差异、实现品牌本土化传播一直是企业面临的巨大挑战。TikTok作为一款全球流行的短视频平台&#xff0c;其庞大的用户基础和强大的影响力&#xff0c;为品牌出海提供了新的机遇。在…

大数据技术复习--大数据与云计算、物联网、人工智能

云计算 ** 概念&#xff1a;美国国家标准技术研究院“一种无处不在的、便捷的且按需的对一个共享的可配置的计算资源&#xff08;如网络&#xff0c;服务器、存储、应用和服务&#xff09;进行网络访问的模式&#xff0c;他能够通过少量的管理或服务供应商的互动实现计算资源的…

CTFHub技能树web——XSS——DOM反射

根据框里的内容 直接右键查看网页源代码 看到 了其闭合方式 然后去网页测试一下alert&#xff08;1&#xff09;反射 ;</script><script>alert(1)</script> 看到 确实存在 去xssaq.cn 创建一个项目 把src粘过来 在第一个输入框中 再将返回回来的url 复…

MATLAB计算心理声学烦恼度例子

在这个例子中&#xff0c;您测量发动机噪音&#xff0c;并使用心理声学指标来模拟其感知响度、尖锐度、波动强度、粗糙度和总体烦扰程度。然后&#xff0c;模拟添加隔音材料&#xff0c;重新计算总体噪音水平。最后&#xff0c;比较恼人程度&#xff0c;并显示应用隔音材料后的…

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了&#xff0c;而 3.3.x 作为最新发布的版本&#xff0c;带来了许多新特性和改进。本篇文章将详细介绍这些新特性&#xff0c;并通过样例代码加以解释&#xff0c;帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…