这期内容当中小编将会给大家带来有关unity中sapi语音朗读的简单用法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
成都创新互联专注于企业成都全网营销、网站重做改版、惠济网站定制设计、自适应品牌网站建设、H5高端网站建设、商城网站定制开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为惠济等各大城市提供网站开发制作服务。运行环境:win10, Unity5.6.2f1/Unity2018.2.6f1(两个版本都试了,可以)
using SpeechLib; //... SpVoice voice = new SpVoice();
书接上文Unity中使用Windows的sapi进行语音朗读
上文例子中的代码只是最最简单的使用方法,实际用时是有问题的。
这样直接
voice.Speak(str);
如上简单粗暴的使用,会卡住当前Unity程序的主线程,在朗读完毕之前会一直卡,包括关闭Unity程序,也还是会一直读完内容
首先解决卡主线程的问题
自然就想到了开子线程
Thread t=new Thread(()=>{ voice.Speak(str); }); t.Start();
这样让它朗读文字,的确不卡主线程了
但是,关闭Unity程序时,依然还是会一直读完内容
那好,在关闭时先让voice停止
private void OnApplicationQuit() { voice.Pause(); }
的确有用,关程序时,马上就不朗读了,但是,程序会卡住一会儿,才会关闭。
所以还是有问题
最终解决方案:
不需要开子线程
根据我的需求,不需要暂停,只要停止,那么不用voice.Pause()了
代码:
朗读停止
voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
执行上面语句,朗读即刻停止,在程序关闭时可调用上述语句,比如加在OnApplicationQuit()方法中。
2.不开子线程,使朗读不卡
voice.Speak(str, SpeechVoiceSpeakFlags.SVSFlagsAsync);
所以说voice.Speak方法,用两个参数的,第二个参数非常重要
SVSFPurgeBeforeSpeak
如果正在朗读,则停止,然后朗读当前的内容
SVSFlagsAsync
这个看名字就知道,异步,不会卡主线程。
这样一来,不用开子线程直接异步朗读,不卡主线程,而且可以随时停止,实测关闭Unity程序(发布出的Windows端程序)时也不会卡住,立即关闭
上述就是小编为大家分享的unity中sapi语音朗读的简单用法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。