web语音发音实现【非异地版】

来源:互联网 发布:淘宝如何看到买家评价 编辑:程序博客网 时间:2024/04/29 07:26

          这两天做食堂的订餐系统的发音功能,颇有感受,借此分享。本文软件资源:http://download.csdn.net/detail/tr1912/9597635


一、语言的构思


        开始提出了语音的这个词汇,听着很是高大上的感觉,听起来实现的非常难,但是看了文档,用起来还是比较简单的。在这里我们用到了两种方式来播放语音,一种是微软自带的微软TTS引擎,一种是我自己在网上找的中国做的捷通华声语音系统。其实要是论易用性呢,微软自带的这个比较好,为什么呢?因为这个语音系统的基础是封装在win7以上的电脑里面的,所以一般的使用就是直接调用系统的类库就可以了。但是,要是扩展的话就需要很大的麻烦了,因为里面的扩展并不是很多。

         语音的构思方式主要是来自报什么,怎么报来思考的。由于只是在刷卡的页面需要提示人们菜价,因此呢简单一句话,刷卡就报。


二、代码的实现


        由于一开始用微软TTS语音的时候是用的同步的方法,我们还不会多线程的异步,所以我只是用了一小下,发现了问题,就是只要运行了语音功能,别的代码就暂停了,不能有很好的用户体验,所以放弃了这个方案,后来在网上查才看见有这个捷通华声语音系统,看网上的评论还不错,就下载了一个版本的试了试,起初看到他有多程,就觉得肯定可以实现,就去看Demo和文档了。

        这个文档的地方很难找,位置见下图(软件安装位置默认):



其中里面的文件名称和作用一目了然不是吗?




         Bin里面放的是演示程序,所有的功能都从那里体现,而Examples下面是用各种语言和方法实现的例子,我就是这样参照的。文档在Bin的help下面。

       仿照C#的例子,我首先找到了 他们用的核心就是一个CS文件:


其中这个CS文件是以下面的DLL为核心写的,方法都在JTTS_ML.cs中实现。详情见说明文档,下载地址在最上方。


具体使用:初始化——执行——结束


C#命名空间引用:

using InfoQuick.SinoVoice.Tts;

    

          初始化代码:


public bool InitJtts()        {            string strLibPath = null;       //高级配置文件的初始化            string strSerialNO = null;      //初始化序列            int iErr = 0;            //错误代码            iErr = Jtts.jTTS_End();       //结束正在运行的            iErr = Jtts.jTTS_Init(strLibPath, strSerialNO);     //初始化驱动            if (Jtts.ERR_NONE == iErr || Jtts.ERR_ALREADYINIT == iErr)            {                return true;            }            else            {                return false;            }        }

        每次执行命令的时候都尽量初始化:

     

InitJtts();Jtts.jTTS_Play("您好,您未订餐,请在等候区等待!", 0);

       这样就可以朗读了,如果想设置语速和音量则需要查文档,看参数然后设置,如:


Jtts.jTTS_SetParam(3, 7);       //语速7Jtts.jTTS_SetParam(4, 7);      //音量7

     如果想判断当前的阅读状态(朗读,停止,空闲)则需要status这个方法来判断:


    int ttsStatus = Jtts.jTTS_GetStatus();     //返回的INT类型代表什么状态需要看文档。


     如果想清空当前缓存,则用这个:

InitJtts();Jtts.jTTS_End();   //释放空间,要在没哟朗读的情况下



       我用到的函数就是这么多,具体怎么去安排,去实现,就得看自己的程序了。


0 0
原创粉丝点击