我是靠谱客的博主 想人陪故事,最近开发中收集的这篇文章主要介绍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)下有很多的接口,很多的东西也是让我们摸不着头脑,这时候,我们应该仔细地分析,找到我们所需要的东西,看懂我们要调用的函数、接口,不要被那些我们不熟悉的东西所吓倒,学会即学式+顺便学习的方法,这一点我认为很重要的。




最后

以上就是想人陪故事为你收集整理的C#开发语音程序入门之文字朗读的全部内容,希望文章能够帮你解决C#开发语音程序入门之文字朗读所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部