在 UWP 里,可以非常方便将某个文本转换为音频语音,转换时,将会根据输入的内容以及本机所安装的语言库选择一位机器人帮忙将输入的文本转换为语音。本文来告诉大家如何切换文本转语音的机器人,例如从默认的女声转换为男声,如选择 Kangkang 或 Huihui 等特定机器人帮助转换语音

刚好从卢老师那里接了一个任务,录制 dotnet 的 20 周年的祝贺视频。然而过年生活太好的我嗓子沙哑了,于是本来普通话就说得不标准的我开始寻求起代码之神的帮助,好在翻到了自己的博客,找到了 win10 uwp 字符文本转语音声音文件方法 这篇博客,开始按照此方式录制,却发现了默认语音不是 Kangkang 机器人的。在 UWP 里的 SpeechSynthesizer 的 Voice 属性可以让咱设置所采用的机器人,但是此 VoiceInformation 对象却不能创建,不得不赞叹一下 API 设计者的强大

按照我也不知道哪学到的知识,文本转语音所采用的 TTS 需要依靠本机所安装的语言库,可以在注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\ 路径下获取到当前本机所安装的语言库。也就是说即使自己开发了此功能,在用户端能否使用,完全需要取决于用户端是否安装了对应的语言包

在 UWP 下,不提供 VoiceInformation 对象的创建方法,必须通过 SpeechSynthesizer 的 AllVoices 属性获取本机已安装的机器人,从里面挑选一个用来设置。例如以下代码就是挑选 Kangkang 机器人用来帮忙转文本

using Windows.Media.SpeechSynthesis;

            using (SpeechSynthesizer synthesizer = new SpeechSynthesizer())
{
VoiceInformation voice = SpeechSynthesizer.AllVoices.FirstOrDefault(v => v.Id.Contains("zhCN_KangkangM"));
synthesizer.Voice = voice;
}

以上的 AllVoices 属性是静态属性,获取时,即可拿到本机所有的已安装的机器人,可以自己遍历。但是由于这是一个 COM 对象,在 VS 调试使用相对不方便,推荐大家自己写一次循环获取一下

接下来的转换文本为语音的方法就之前博客的差不多,代码如下

        private async void Button_OnClick(object sender, RoutedEventArgs e)
{
using (SpeechSynthesizer synthesizer = new SpeechSynthesizer())
{
VoiceInformation voice = SpeechSynthesizer.AllVoices.FirstOrDefault(v => v.Id.Contains("zhCN_KangkangM"));
synthesizer.Voice = voice;
var text = InputTextBox.Text;
try
{
SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync(text);
using (stream)
{
FileSavePicker savePicker = new FileSavePicker();
savePicker.FileTypeChoices.Add("音频", new[] { ".wav" }); var result = await savePicker.PickSaveFileAsync();
var wordFile = result; using (var wordFileStream = await wordFile.OpenStreamForWriteAsync())
{
await stream.AsStreamForRead().CopyToAsync(wordFileStream);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception);
}
}
}

界面代码如下

    <Grid>
<TextBox x:Name="InputTextBox" Margin="10,10,10,100" HorizontalTextAlignment="Left" HorizontalAlignment="Left" TextWrapping="Wrap"/>
<Button Margin="10,10,10,10" VerticalAlignment="Bottom" Content="文字转语音" Click="Button_OnClick"></Button>
</Grid>

本文代码放在 github 欢迎小伙伴访问

更多请看 SpeechSynthesizer 类 (System.Speech.Synthesis) Microsoft Docs

win10 uwp 选择文本转语音的机器人的更多相关文章

  1. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  2. Win10/UWP开发—使用Cortana语音指令与App的前台交互

    Win10开发中最具有系统特色的功能点绝对少不了集成Cortana语音指令,其实Cortana语音指令在以前的wp8/8.1时就已经存在了,发展到了Win10,Cortana最明显的进步就是开始支持调 ...

  3. Win10/UWP开发—使用Cortana语音指令启动前台App

    这两天进群(53078485)找大咖的童鞋比较多,只是大咖比较忙,目前Demo还没有要到,这里先给大家转载一篇Aran大咖的博客学习下,以下是原文: Win10开发中最具有系统特色的功能点绝对少不了集 ...

  4. win10 uwp 读取文本GBK错误

    本文讲的是解决UWP文本GBK打开乱码错误,如何去读取GBK,包括网页GBK.最后本文给出一个方法追加文本. 我使用NotePad记事本保存文件,格式ASCII,用微软示例打开文件方式读取,出现错误 ...

  5. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  6. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  7. win10 uwp 如何开始写 uwp 程序

    本文告诉大家如何创建一个 UWP 程序. 这是一系列的 uwp 入门博客,所以写的很简单 本文来告诉大家如何创建一个简单的程序 安装 VisualStudio 在开始写 UWP 需要安装 Visual ...

  8. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  9. 用TTS实现文本转语音

    最近被toefl单词虐成狗::>_<:: 想做一个可以自动把单词转成语音的软件,这样就可以在路上戴耳机边走边听啦~ 用微软的TTS语音库可以很容易地实现.早期的TTS要想实现中英文混合朗读 ...

  10. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

随机推荐

  1. 记录--三分钟打造自己专属的uni-app工具箱

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 介绍 可曾想过我们每次创建新项目,或者换地方写程序,都要把之前写过的工具类找出来又要复制粘贴一遍有些麻烦,尤其是写uni-app自定义模板 ...

  2. 快速上手系列:webservice

    不同公司的系统交互,用webservice可以起到安全的作用. Webservice使用方法如下:   客户端: 这个是要打成jar包,给别人的用的,里面只是接口,没有实现.   用Webservic ...

  3. PicGo图床配置码云gitee仓库上传typora图片

    (前提是已注册gitee并新建一个仓库作为你上传图片的位置) 首先在PicGo官网下载软件:https://picgo.github.io/PicGo-Doc/zh/ 打开typora,找到偏好设置. ...

  4. Python BeautifulSoup 简单使用方法

  5. C++设计模式 - 建造者模式(Builder)

    对象创建模式 通过"对象创建" 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式 Fac ...

  6. #单位根反演,二项式定理#LOJ 6485 LJJ 学二项式定理

    题目 \[\large\sum_{i=0}^nC(n,i)S^ia_{i\bmod 4} \] \(n\leq 10^{18},S,a\leq 10^8\) 分析 前面这一坨看起来就像是二项式定理,考 ...

  7. 开源LaTex可视化编辑器推荐,支持LaTex代码补全,一键套用模板!

    https://latexlive.com/ 这还是个开源项目,不过是C#的,搭建的成本比较大,没PHP好搞. 下面是这个网站

  8. Spring源码 19 IOC getBean方法

    前面实现了 ClassPathXmlApplicationContext 的构造,接下来分析其调用的 getBean 方法. 以 getBean(UserDao.class) 为例. 1 Abstra ...

  9. Grafana 系列-统一展示-5-AWS Cloudwatch 仪表板

    系列文章 Grafana 系列文章 ️强烈推荐 强烈推荐使用 GitHub 上的 monitoringartist/grafana-aws-cloudwatch-dashboards 仪表板.该 re ...

  10. Java面试题总结:基础及语法篇169道

    下载链接:https://gitee.com/ItBoShao/wechat_applet/blob/master/Java面试题总结:基础及语法篇169道.pdf