Unity3D 中使用 Interop.SpeechLib 实现语音合成

Unity3D 语音合成实践

本代码片段展示了如何在 Unity3D 环境下利用 Interop.SpeechLib 库实现文本转语音功能。

核心思路是创建一个新的线程,在该线程中实例化 SpVoice 对象并调用 Speak 方法朗读指定文本。SVSFPurgeBeforeSpeakSVSFlagsAsync 标志位分别用于清空待朗读队列和异步执行朗读操作。

using UnityEngine;
using System.Threading;
using SpeechLib;

public class SpeechTest : MonoBehaviour {

    Thread t;
    SpVoice spVoice;
    string DefaultEnglishLangID = "804"; // 中文409:英文

    void Update () {
        if (Input.GetKeyDown(KeyCode.S)) {
            t = null;
            SpeakVoice("哈哈,正义必胜,hello world"); 
        }
    }

    public void SpeakVoice(string content) {
        try {
            if (t==null) {
                t = new Thread(() => {
                    string contentStr = "" + content + "";
                    if (spVoice == null) {
                        spVoice = new SpVoice();
                        //spVoice.Voice = spVoice.GetVoices(string.Empty, string.Empty).Item(0);
                        spVoice.Speak(contentStr, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak | SpeechVoiceSpeakFlags.SVSFlagsAsync);
                    } else {
                        spVoice.Speak(contentStr, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak | SpeechVoiceSpeakFlags.SVSFlagsAsync);
                    }
                }); 
            }
            t.Start();
        } catch (System.Exception e) {
            Debug.Log(e);
        }
    }
}

需要注意的是,Interop.SpeechLib 依赖于 Windows 语音合成引擎,因此该代码仅适用于 Windows 平台。

zip 文件大小:56.32KB