要想用C#开发语音程序,首先要电脑上要有Speech API(SPAI)。

大家通过读这段内容可以了解到自己的电脑是否已经安装SPAI:

The Speech API has been an integral component of all Microsoft Windows

versions since Windows 98. Microsoft Windows XP and Windows Server 2003

include SAPI version 5.1. Windows Vista and Windows Server 2008 include SAPI

version 5.3, while Windows 7 includes SAPI version 5.4. Code written for SAPI
5.3 (Vista)

will run on SAPI 5.4 (Windows 7) without recompiling.

在5.1及以上版本都是支持中、日、英三种语言的。

我们还是先来看个例子,结合小例子再来解释:

新建项目-windows窗体应用程序,名称SpeechDemo

如图:

由于我的电脑是win10,所以可以直接添加引用:如图:

窗体代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using SpeechLib;//speak语言包namespace SpeechDemo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 文字to语音/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSpeech_Click(object sender, EventArgs e){SpVoice voice = new SpVoice();voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);voice.Speak(textBox1.Text);}

----------------------------------------------------------------------------

其中:

1. SpeechVoiceSpeakFlags 是一个枚举。

“SpVoice标志
    SVSFDefault = 0
    SVSFlagsAsync = 1
    SVSFPurgeBeforeSpeak = 2
    SVSFIsFilename = 4 
    SVSFIsXML = 8
    SVSFIsNotXML = 16
    SVSFPersistXML = 32

“正规化标志
    SVSFNLPSpeakPunc = 64

“面具
    SVSFNLPMask = 64
    SVSFVoiceMask = 127
    SVSFUnusedFlags = -128

结束枚举分子
SVSFDefault
指定应使用的默认设置。默认值是:
讲定的文本字符串同步(覆盖与SVSFlagsAsync),
不清除挂起说话请求(覆盖与SVSFPurgeBeforeSpeak),
为了解析XML的文本,如果第一个字符是左尖括号(覆盖与SVSFIsXML或SVSFIsNotXML),
不坚持全球XML状态更改在讲电话(覆盖SVSFPersistXML),
不扩展的标点字符成字(覆盖与SVSFNLPSpeakPunc)的。
SVSFlagsAsync
指定的讲调用应该是异步的。也就是说,它会立即返回排队的讲请求后。
SVSFPurgeBeforeSpeak
清除所有悬而未决的发言请求,在此之前讲的呼叫。
SVSFIsFilename
的说话方式传递的字符串是一个文件名,而不是文字。其结果,没有发言字符串本身而是该文件的路径,该路径是口头的处理。
SVSFIsXML
输入的文本将被解析为XML标记。
SVSFIsNotXML
输入的文本将不会被解析的XML标记。
SVSFPersistXML
XML标记的全局状态的变化将持续到说话的呼叫。
SVSFNLPSpeakPunc
,标点符号应扩大到字(例如:“这是什么。”将成为“这是这期”)。
SVSFNLPMask
SAPI(而不是文本到语音引擎)处理此掩码中的标志。
SVSFVoiceMask
此面膜具有每一个标志位设置。
SVSFUnusedFlags
此面膜具有每一个未使用的位集。

2. SpVoice

SpVoice类是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。

SpVoice类有以下主要属性: 
    Voice:表示发音类型,相当于进行朗读的人,包括Microsoft Mary,Microsoft Mike,Microsoft Sam和Microsoft Simplified Chinese四种。其中前三种只能读英文,最后一种可以读中文,也可以读英文,但对于英文单词只能将其包括的各个字母逐一朗读出来。下面的程序中我们将会想办法解决这个问题。 
    Rate:语音朗读速度,取值范围为-10到+10。数值越大,速度越快。 
    Volume:音量,取值范围为0到100。数值越大,音量越大。 
    SpVoice有以下主要方法: 
    Speak:完成将文本信息转换为语音并按照指定的参数进行朗读,该方法有Text和Flags两个参数,分别指定要朗读的文本和朗读方式(同步或异步等)。 
    Pause:暂停使用该对象的所有朗读进程。该方法没有参数。 
    Resume:恢复该对象所对应的被暂停的朗读进程。该方法没有参数。

代码很简单,只要运行在文本框中输入中文或者英语都可以正常的朗读。

关于SpVoice接口下的函数可以参见:http://msdn.microsoft.com/en-us/library/ee413476(v=vs.85)

相关帮助连接:http://www.microsoft.com/en-us/Tellme/developers/default.aspx?tab=desktop

可以看到,在text-to-speech engine interface(api-level)下有很多的接口,很多的东西也是让我们摸不着头脑,这时候,我们应该仔细地分析,找到我们所需要的东西,看懂我们要调用的函数、接口,不要被那些我们不熟悉的东西所吓倒,学会即学式+顺便学习的方法,这一点我认为很重要的。

C#开发语音程序入门之文字朗读相关推荐

  1. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  2. 微信小程序开发.小程序入门(上)

    1.小程序简介 微信小程序,小程序的一种,英文名Wechat Mini Program,   是一种不需要下载安装即可使用的应用,   它实现了应用"触手可及"的梦想,用户扫一扫或 ...

  3. Electron前端开发桌面程序--入门篇

    前言 前端开发桌面程序这个概念已经出现有一段时间了,这项技术也已经走向成熟,Github上nw和光electron的star就差不多有10w颗星了,github也衍生出了很多开源的桌面项目俨然成了一个 ...

  4. 微信程序开发.小程序入门

    一.小程序简介 微信小程序,小程序的一种,英文名Wechat Mini Program,   是一种不需要下载安装即可使用的应用,   它实现了应用"触手可及"的梦想,用户扫一扫或 ...

  5. 微信程序开发小程序入门

    1.小程序简介 微信官方文档 小程序的生命周期 // app.js App({   onLaunch() {     // 展示本地存储能力     const logs = wx.getStorag ...

  6. PhoneGap开发手机程序入门教程

    用PhoneGap开发手机移动程序 1.    什么是PhoneGap PhoneGap是一个自由开放源码的开发工具和框架,允许利用HTML + JavaScript +CSS的强大功能在多个手机平台 ...

  7. 6篇干货带你学会用vue开发小程序——mpvue

    #第  003 期# 前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项.由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用 ...

  8. Java语音程序开发用户指南

    1 概述 本文档是开发科大讯飞Java语音程序的用户指南,定义了语音听写.语音识别.语音合成以及语义理解相关接口的使用说明和体系结构,如图1所示. 科大讯飞语音功能抢先体验: http://www.x ...

  9. Winsock开发网络通信程序的经典入门

    Winsock开发网络通信程序的经典入门 对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Un ...

最新文章

  1. ext 动态赋值text_JQuery中html,val,text-取值赋值的区别-
  2. java中String的常用方法
  3. Jupyter Notebook 使用小记
  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 32 章 回归测试_32.5. 测试覆盖检查
  5. 首个金融领域的开源中文预训练语言模型FinBERT了解下
  6. ES6.X,你必须知道的API和相关技巧
  7. 背包例题【dp练习】
  8. 拼多多上线“女装11.11爆款必买团”活动 一款打底裤一天卖出4.2万单
  9. 日积月累系列之分页控件(js源码)
  10. ReactiveCocoa中信号的使用
  11. Qt--将Qt 动态链接生成的exe及依赖dll打包方法
  12. 解决SVN Cleanup错误: Failed to run the WC DB work queue associated with
  13. 计算机网络谢希仁课后答案详解+计算机网络释疑与习题解答PDF+各章重点题目
  14. 贴吧签到php,贴吧自动签到 – 前端开发,JQUERY特效,全栈开发,vue开发
  15. android USB OTG功能如何打开及实现
  16. 请问王菲的<流年>歌词的含义
  17. 知识点:Office插入数学公式常用的快捷键(终于可以解放鼠标了)
  18. php time()的用法,PHP timezone_name_from_abbr() 函数用法及示例
  19. linux中如何修改只读文件
  20. ie下js判断本地office版本

热门文章

  1. 企业固定资产管理系统建设方案
  2. JS方式实现隐藏手机号码中间4位数
  3. Android通信安全之HTTPS
  4. CSS中定位属性的常见属性值
  5. Memcached分布式算法
  6. 微信公众号打开的h5网页点击按钮返回公众号
  7. 真香啊,推荐 6 个 Python 数据分析神器
  8. 平面设计需要学习什么,平面设计是什么;夏雨老师
  9. python关于函数作用的描述_Python函数的概念和使用
  10. windowxp网络无法发现其他计算机,几个步骤轻松解决win7无法访问XP系统共享问题...