C#开发语音程序入门之文字朗读

要想用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)下有很多的接口,很多的东西也是让我们摸不着头脑,这时候,我们应该仔细地分析,找到我们所需要的东西,看懂我们要调用的函数、接口,不要被那些我们不熟悉的东西所吓倒,学会即学式+顺便学习的方法,这一点我认为很重要的。




  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值