Unity PC端文字轉語音的實現


第一種方法

1.首先下載一個dll文件 Interop.SpeechLib.dll

放在unity   Plugins文件夾里就可以了

下面上代碼  腳本掛在任意地方運行即可

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SpeechLib;

public class TTS_YuYin : MonoBehaviour
{
    SpVoice voice;
    // Start is called before the first frame update
    void Start()
    {
        //實例化spvoice 對象
        voice = new SpVoice();
        //Item(0)中文語音 Item(1)英文語音 
        voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);
        //語音速度 范圍-10 到10  默認是0
        voice.Rate = 0;
        //語音音量 范圍0到100   默認 100 
        voice.Volume = 100;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            //同步朗讀(同步朗讀時系統會卡在這里,關都關不掉 直到朗讀完畢才會往下執行,建議使用異步朗讀)
            //voice.Speak("hello world 是大師級的卡拉膠SD卡聖誕節啊斯柯達SDKask大開殺戒的卡建檔立卡");
            //異步朗讀
            voice.Speak("狗是由狼馴化而來的。早在狩獵采集時代,人們就已馴養狗為狩獵時的助手。因此," +
                "狗算是人類最早馴養的家畜。河北武安磁山、河南新鄭裴李崗、浙江余姚河姆渡等遺址,都發現了狗骨骼," +
                "足證其馴養歷史之久遠。 山東膠縣三里河出土的狗形鬶,造型生動逼真,使我們得見新石器時代家犬的形態特征。" +
                "陝西西安半坡遺址出土的狗骨,頭骨較小,額骨突出,肉裂齒小,下頜骨水平邊緣彎曲,與華北狼有很大區別," +
                "說明人類馴養狗的歷史確實很早。", SpeechVoiceSpeakFlags.SVSFlagsAsync);
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
            //暫停使用該對象的所有朗讀進程,同步朗讀下無法使用該方法暫停
            voice.Pause();
        }

        if (Input.GetKeyDown(KeyCode.E))
        {
            //恢復該對象所對應的被暫停的朗讀進程
            voice.Resume();
        }
       
    }
   
    private void OnApplicationQuit()
    {
        voice.Pause();
    }    
}

下面是文件地址url:

https://files.cnblogs.com/files/qq2351194611/PC%E7%AB%AF%E8%AF%AD%E9%9F%B3%E8%BD%AC%E6%96%87%E5%AD%97.rar

復制直接下載

打包設置 ! ! ! 分Unity版本  有的版本打包出來沒有聲音

 

 

別人測試的2017.3版本的是不用調的,

我用的是2019.4.5f1版本的, 調到4.x打包出來沒法運行,運行就崩潰,具體為什么暫時不清楚,(編輯器里面是好的,)

不調4.x 打包能運行,但是沒聲音,最后只能用插件了 RTVoice PRO    

 

第二種方法RTVoice PRO插件的使用

 

 下面是插件的地址  ()

鏈接:https://pan.baidu.com/s/1C6cvofGjQCA0XjUYCzeYzg
提取碼:mg6h

 下載之后導入unity

右擊Hierarchy面板添加兩個對象

 這個一定要設置這樣,要不然沒有聲音(如下圖)

Mode  設置成 Speak Native 

 

 

 

 

 添加完成之后創建一個腳本

using Crosstales.RTVoice.Tool;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TTS_Spake : MonoBehaviour
{
    public SpeechText speechText;  //把剛創建的SpeechText拖上來創建連接
    //public TextFileSpeaker speaker;//閱讀文本里面的文字
    
    void Update()
    {
        if (Input.GetKeyDown (KeyCode.I ))
        {
            speechText.Speak();
          
        }
        if (Input.GetKeyDown(KeyCode.O))
        {
            speechText.Silence();

        }
        //if (Input.GetKeyDown (KeyCode.K))
        //{
        //    speaker.Speak();
        //}
    }
}

運行點擊 I 即可聽到  SpeechText  里面的text 內容

 

 點擊 按鍵O 靜音   上面的靜音是關閉當前的說話,  后面寫程序的時候 ,要是連着點倆次就會有倆個重疊的聲音

解決辦法        Speaker.Silence();  (這是RTVoice版本的解決辦法)    在腳本里面加上這句,連着點擊就不會有重疊的聲音了 (具體看自己寫的程序使用)

 speakr.SilenceOnDisable = false;  (關閉所有語音播放)

注意如果你是要用中文,則需要切換到中文語種才能讀,要不然報錯(切換為ch或者cn都可以)

 

 

 

下面是他的語種

 

最后添加一個功能腳本

 

using Crosstales.RTVoice;
using Crosstales.RTVoice.Tool;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 文字轉語音腳本
/// </summary>
public class TTS_YuYin : MonoBehaviour
{
    public SpeechText speechText;
    public static TTS_YuYin instance;
    private void Awake()
    {
        instance = this;
    }
    //說話 有文字提示的
    public void Speaking_speak(string strin)
    {
        GameObjecting.instance.NPCtext_panel.SetActive(true);
        
        NPC_Text.instance.font_text.text = strin;
        speechText.Text = NPC_Text.instance.font_text.text;
        speechText.Speak();
    }
    //光說話沒有文字提示的
    public void Speaking_meiyouTiShi(string strin)
    {               
        speechText.Text = strin;
        speechText.Speak();
        
    }
    //靜音
    public void Speaking_silence()
    {
        speechText.Silence();       
        Speaker.Silence();
    }
    public void ShuiBianGuangGuangMoShi()
    {
        Speaking_speak(Type1_String());
    }
    public string Type1_String()
    { 
      string ss = "你已經進入隨便逛逛模式,在此模式下可以在廠房內隨意走動觀察," +
            "但無法接取任務。點擊1號NPC可以打開模式選擇進入其他模式。";
        return ss;
    }
    public string Type1_String(int aa)
    {
        string ss= string .Empty;
        switch (aa)
        {
            case 0:
                ss = "在機械拆裝作業中,防護裝備是必不可少的。下面我們一起對機器人拆裝主要防護裝備進行認識。" +
                    "根據箭頭指引前往換衣間。";
                break;
            case 1:
                ss = "在機械拆裝作業中,拆裝工具是必不可少的。下面我們一起對機器人拆裝主要拆裝工具進行認識。" +
                    "根據箭頭指引前往工具台。";
                break;
            case 2:
                ss = "機器人在進行拆卸前,需要進行一系列准備工作。准備工作包括清理工作場地、調整機器人位姿和" +
                    "機器人排油。下面,讓我們完成機器人拆卸前的准備工作。";
                break;
            case 3:
                ss = "由於機器人工作后的姿態各異,有些姿態不方便拆卸,所以在拆卸前需要對機器人進行位姿的調整," +
                    "讓機器人處於一個合適的拆卸姿態。";
                break;
            case 4:
                ss = "我們先檢查自己的工作裝備。進行機器的拆裝時,必須穿戴好工作服、勞保鞋和戴好正確的手套。";
                break;
            case 5:
                ss = "機器人的J5軸包含電機組件、手腕以及減速器三個部分。下面,讓我們來學習J5軸的拆卸。";
                break;
            case 6:
                ss = "機器人的J4軸包含小臂組件、電機組件和減速機組件。下面,讓我們來學習J4軸的拆卸。";
                break;
            case 7:
                ss = "機器人的J3軸包含電機組件和J3軸轉座組件。下面,讓我們來學習J3軸的拆卸。";
                break;
            case 8:
                ss = "機器人的J2軸包含機器人的大臂、電機組件和J2軸減速機。下面,讓我們來學習J2軸的拆卸。";
                break;
            case 9:
                ss = "機器人的J1軸拆卸包含底座拆除、底座與J1軸轉座分離、減速機拆卸等。下面,讓我們來學習1軸的拆卸。";
                break;
            default:
                break;
        }
        return ss;
    }
}
View Code

 

 

以上就是插件的簡單使用.(打包出來親測可用)

(.NET Standard2.0    4.x都是可以的)

 

 (補充:  PC端打包出來只有自己電腦可以播放聲音,換一台電腦就不行了,很迷茫 ,有知道是怎么回事的么?評論區可以告訴我,感謝 )

(解決辦法PC打包沒聲音: 電腦系統是閹割版的,所以播放不了。如果不能正常播放,先下載“朗讀女”這個軟件,安裝后,斷網測試看能否播放,如果不能,說明系統缺少組件。百度搜索TTS修復工具(最好是官方的)修復即可。)。

 

Android 端打包出來是可以播放語音的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM