(二)语音合成测试案例

上一章节大致描述了一下.NET
Framework中的语音识别和语音合成的应用开发接口。接下来以一个测试案例来展示下SAPI的使用。以下案例均已VS2010 +
Framework4.0为例。

用VS新建一个窗体应用程序。并添加引用。

测试程序界面布局如下:

下面是完成的代码:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis;

namespace Synthesis
{
public partial class FrmMain : Form
{
//语音合成引擎
private SpeechSynthesizer speechSynthesizer;

public FrmMain()
{
InitializeComponent();
this.speechSynthesizer = new SpeechSynthesizer();
}

private void FrmMain_Load(object sender, EventArgs e)
{
//获取系统已安装的语音库列表
var voiceList = (from item in this.speechSynthesizer.GetInstalledVoices() select item.VoiceInfo.Name).ToList();
this.cmbVoice.DataSource = voiceList;
//var voiceList = this.speechSynthesizer.GetInstalledVoices();
//foreach (var item in voiceList)
//{
// this.cmbVoice.Items.Add(item.VoiceInfo.Name);
//}
//this.cmbVoice.SelectedIndex = 0;

this.speechSynthesizer.Rate = 0; //语速值范围: -10 到 10
this.speechSynthesizer.Volume = 100; //声音大小值范围: 0 到 100
this.speechSynthesizer.SelectVoice(this.cmbVoice.Text); //设置用于合成的语音库
}

private void cmbVoice_SelectedIndexChanged(object sender, EventArgs e)
{
this.speechSynthesizer.SelectVoice(this.cmbVoice.Text); //改变当前语音库
}

private void btnSpeak_Click(object sender, EventArgs e)
{
//this.speechSynthesizer.SpeakAsync(this.txtContent.Text);
this.speechSynthesizer.Speak(this.txtContent.Text); //将文本合成语音
}
}
}

运行后,在文本框输入需要合成的文本,点击Speak,就OK了。

运行测试结果。

如果你看了第一章关于SAPI简述,那么你也可以使用第三方语音库来合成。如图:

这声音还是比较接近自然语音的。(注意我提供的第三方语音库,安装好了需要用包里的破解文件覆盖源文件,否则这里合成时会多说一句广告语的(*^__^*)
,详见上一章的介绍)

在语音合成的技术中有一个难点就是多语言混合合成。如果说我们做一个电子书阅读器的话,除了阅读时语气和标点停顿外,那么多语言混合的问题也是一个头疼的事情,因为一本小说中混合多种语言那是常事。

先来看测试:

我分别使用中、日、韩、英四种语言合成上述文本,测试结果如下:

1.中文语音包支持中英混合合成

2.英语语音包仅仅支持英文合成

3.日文语音包会把中文识别为日本合成,部分汉字可以,但是中文汉字比日文多得多,况且我们用的是简体,我基本认为不支持中日混合的。此外日文把英文本土化了所以日英混合是可以的,但是日文包读的英文单词是本土化之后的发音,听不习惯我也没有办法。这也是日本人英文烂的原因吧。

4.韩文语音包和日文语音包差不多,从我学韩文和日文的经验上看,他们两个国家的语言虽然都源自中文,但韩日成一个体系,基本大同小异。韩文语音包会把中文识别成韩文合成,同样我认为是不支持中韩混合的。其次就是韩文语音包可以支持日韩混合,不过发音用的是韩文的发音法,听着也很变扭。韩文也是和日文一样把英文本土化了。但是出乎意料的是我一向认为韩国人英语最差,其次是日本。没想到这个语音包的英文合成尽然比日文要好,但是也有很大的本土音听着别扭死了。因此韩语语音包基本支持日、韩、英的混合。

上述仅仅是简单测试结果。做这个测试是为了选择合适的语音包来开发我们的应用程序。如果你仅仅只需合成中文那么只用中文包就行了。但是混合合成也是一个不能避免的问题。怎么解决混合的问题。

市面上的解决方案做的比较好的就是讯飞的语音解决方案了。至于有没有提供开发用的API我了解不是很多。另一个途径就是云语音的解决方案,Google、百度、360都有吧,不过云语音需要网络支持。

一下给出一个混合的解决方案,在加载需要合成文本时需要先对文本做词法分析,把不同语言的文本用标记标识出来,一般可以使用XML文件。阅读时根据不同的语言调用不同的语音库就行了。

另外一个问题就是关于数字的。比如:

1234 这个你是读成一千二百三十四 还是 一 二 三 四 呢?

如果你要读成一千二百三十四就连写,否则需要加标点或空格隔开。

1234 读成一千二百三十四

1  2  3  4 就会读成 一 二 三 四

结束语:这篇仅仅是语音合成的一个测试案例,虽然案例简单但是也把开发中可能遇到的一些问题做了解释,这样可以避免开发时走弯路。或不知从何入手。

程序源码

时间: 2024-10-12 12:58:22

(二)语音合成测试案例的相关文章

nginx整合tomcat集群并做session共享----测试案例

最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台tomcat下,(tomcat-A,tomca-B),使用nginx做反向代理,按照设置的权值,将请求分发到后台的tomcatA/tomcat-B,并且实现session共享. 配置好本地域名指向:修改host文件:添加 127.0.0.1  www.domain.com.cn 新建项目:tiny-d

为初学者写ORM,ORM的原理及测试案例

提纲 一.什么是ORM.二.反射以及Attribute在ORM中的应用.三.创建一个数据库表和表对应的实体model.四.实体model如何映射出数据库表.五.组合ORM映射生成insert语句.六.测试ORM的插入映射.七.总结. 内容: 一 .什么是ORM? 概念: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换. 详细介绍:  让我们从O/R开始.字

pikachu练习平台(XSS-漏洞测试案例(cookie的窃取和利用、钓鱼攻击、XSS获取键盘记录))

XSS-漏洞测试案例 xss案例 1.cookie的窃取和利用 2.钓鱼攻击 3.XSS获取键盘记录 在进行案例之前首先要搭建xss后台 搭建xss后台 1.在pikachu文件夹下面,把pkxss单独放在www下面: 2.修改配置文件  数据库服务器地址,账号,密码: 3.登录: 4.安装: 5.修改,重定向到一个可信的网站(令点击者不知情): 后台登陆成功: 一. get型xss cookie值获取 首先修改字符输入长度: 输入框输入 <script>document.location='

二、测试作业 你最喜欢做什么--兴趣问题清单

二.测试作业 你最喜欢做什么--兴趣问题清单 •根据迄今为止已有的经历,你真正喜欢从事的工作是什么? 设计类方面,有自主权,无明确方向. •休暇时间你最爱从事的活动是什么? 瑜伽,旅游,与朋友见面. •什么令你精疲力尽?什么能激发你的活力? 长时间的大量工作,做成一件事后的满足感. •你是重视质量,还是重视数量? 质量. •你喜欢与人共事吗? 喜欢. •你喜欢在工作时使用计算机吗? 一般. •你喜欢写作吗? 一般. •对于创作和销售你更喜欢哪一种工作? 创作. •你愿帮运气不佳的人一臂之力吗?

memcached +mysql+php 测试案例

参考:http://deidara.blog.51cto.com/400447/317526/ 一.测试环境: 二.测试步骤: 1.完成基础环境的搭建(nginx+php-fpm+memcache+memcached+mysql) 注意: nginx+php-fpm与mysql环境的分离 php如何扩展模块memcache memcache与memcached的区别 2.启动这个环境,保证能够正常的启动 注意: 启动memcached: memcached -d -m 100 -l 192.16

[测试案例]页面CPU使用率测试

1. 场景描述 测试网站某页面注册表单,该表单包含若干个文本输入框以及两个密码输入框:登录密码和确认密码.登录密码只能由数字或字母组成,并且长度在6-20个字符之间,确认密码必须与登录密码完全一致,当满足以上所有条件后,才能成功提交注册表单,否则提交时将在不符合要求的输入框右侧提示对应的错误信息. 2. 问题说明 在Chrome浏览器下对登录密码和确认密码输入框进行反复输入测试时,发现浏览器的CPU占有率会不断上升,导致页面出现卡顿.无响应的情况,但是在相同浏览器下测试其他文本输入框或在其他浏览

测试案例小问题

测试案例小问题

一个测试案例的分析

案例: 某软件公司在开发一个城镇居民保险系统时,在单元测试.集成测试阶段,为了追赶进度,开发人员与测试人员都没有介入测试工作. 系统测试阶段,测试小组借助缺陷管理工具和开发人员交互进行测试与缺陷修复工作.期间,发现"扭转文档无法归档"的严重错误,开发人员在修改时,认为难度太大,决定暂停修改,得到测试人员认可.在产品发布前,该问题在开发环境下得到解决. 回归测试结束后,开发人员把开发环境下的产品打包,发送给客户. 分析:在案例中,有几处显然不合理的地方: 1.测试介入太晚 2.回归测试做

软件工程--构建之法--功能测试 设计10个或者更多的测试案例完成对钉书钉的功能测试

设计10个或者更多的测试案例完成对钉书钉的功能测试 (1)使用不同的纸质材料厚度,使用相同规格钉书钉,查看钉书器是否正常工作 (2)使用不同规格的钉书钉,使用相同厚度的纸质材料,查看钉书器是否正常工作 (3)测试钉书器在不同的使用方式下使用,查看钉书器是否异常 (4)测试钉书器总的使用次数 (5)测试钉书器订材料后,美观次数 (6)测试钉书器钉材料后,不美观次数 (7)测试钉书器在不同温度条件下,查看钉书器是否正常工作 (8)测试钉书器在不同湿度条件下,查看钉书器是否正常工作 (9)使用不同材料