中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity中sapi語音朗讀的簡單用法

發布時間:2021-10-27 09:08:44 來源:億速云 閱讀:187 作者:柒染 欄目:游戲開發

這期內容當中小編將會給大家帶來有關unity中sapi語音朗讀的簡單用法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

運行環境: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();
}

的確有用,關程序時,馬上就不朗讀了,但是,程序會卡住一會兒,才會關閉。

所以還是有問題

最終解決方案:

  1. 不需要開子線程

  2. 根據我的需求,不需要暫停,只要停止,那么不用voice.Pause()了

代碼:

  1. 朗讀停止

    voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);

    執行上面語句,朗讀即刻停止,在程序關閉時可調用上述語句,比如加在OnApplicationQuit()方法中。

2.不開子線程,使朗讀不卡

voice.Speak(str, SpeechVoiceSpeakFlags.SVSFlagsAsync);

所以說voice.Speak方法,用兩個參數的,第二個參數非常重要

SVSFPurgeBeforeSpeak

如果正在朗讀,則停止,然后朗讀當前的內容

SVSFlagsAsync

這個看名字就知道,異步,不會卡主線程。

這樣一來,不用開子線程直接異步朗讀,不卡主線程,而且可以隨時停止,實測關閉Unity程序(發布出的Windows端程序)時也不會卡住,立即關閉

上述就是小編為大家分享的unity中sapi語音朗讀的簡單用法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

花莲县| 锦州市| 清远市| 荥阳市| 阿勒泰市| 桃园市| 石河子市| 梓潼县| 潞西市| 阳春市| 库伦旗| 花莲县| 宣汉县| 上虞市| 潼南县| 吉木萨尔县| 临安市| 古蔺县| 赤峰市| 讷河市| 长葛市| 崇州市| 绵阳市| 伊宁县| 怀柔区| 苍南县| 于都县| 福建省| 锦州市| 新巴尔虎右旗| 连平县| 孟州市| 光泽县| 鸡东县| 凌海市| 石屏县| 邹城市| 新巴尔虎左旗| 南昌市| 大宁县| 扶沟县|