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 端打包出来是可以播放语音的

 

posted @ 2021-02-25 14:09  剑起苍穹  阅读(3949)  评论(2编辑  收藏  举报
/*鼠标点击特效*/