Unity3D 中使用 Interop.SpeechLib 实现语音合成
Unity3D 语音合成实践
本代码片段展示了如何在 Unity3D 环境下利用 Interop.SpeechLib
库实现文本转语音功能。
核心思路是创建一个新的线程,在该线程中实例化 SpVoice
对象并调用 Speak
方法朗读指定文本。SVSFPurgeBeforeSpeak
和 SVSFlagsAsync
标志位分别用于清空待朗读队列和异步执行朗读操作。
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 平台。
56.32KB
文件大小:
评论区