我正在構建一個應用程序,該應用程序具有chatbot,並使用SAPI將文本轉換爲用於LypSync的SALSA資源的語音。我試圖完成的是創建一個直接從TTS音頻輸出提供的實時AudioSource。我已經成功地將這個通過保存到每個句子的wav文件中,然後在運行時將wav文件加載到具有LypSync的遊戲對象等。這可以工作,但持續加載wav文件會使應用程序變慢,每次凍結這樣做甚至崩潰。從SAPI(Microsoft文本到語音API)使用Speechlib作爲Unity AudioSource
我知道可以從計算機上的麥克風製作一個現場音頻源。所以我想要做的就是這樣的事情。
我試過從我的天真級程序員那裏得到的邏輯方式。只需將udioOutput流從TTS作爲AudiSource音頻片段連接起來,就像這樣:
TTSvoice.AudioOutputStream = AudioSource.clip;
,並得到這個錯誤:
error CS0029: Cannot implicitly convert type UnityEngine.AudioClip' to SpeechLib.ISpeechBaseStream'`SpeechLib.ISpeechBaseStream'
我知道在Python中,你可以連接從直通numpy的不同庫中的音頻對象將音頻轉換爲標準原始陣列數據。但我對C#和Unity也有點新鮮。
這裏是我的代碼:
using UnityEngine;
using System.Collections;
using SpeechLib;
using System.Xml;
using System.IO;
using System;
using System.Diagnostics;
public class controller : MonoBehaviour {
private SpVoice voice;
public AudioSource soundvoice;
// Use this for initialization
void Start() {
voice = new SpVoice();
GameObject character = GameObject.Find("character");
soundvoice = character.GetComponent(typeof(AudioSource)) as AudioSource;
voice.AudioOutputStream = soundvoice.clip;
StartCoroutine(talksome());
}
// Update is called once per frame
void Update() {
}
IEnumerator talksome() {
while (true)
{
counter++;
string sentence = "counting " + counter;
voice.Speak(sentence);
print(sentence);
voice.WaitUntilDone(1);
yield return new WaitForSeconds(2);
}
}
}
第一:您可以刪除更新功能 - >即使是空Unity會每幀調用它。其次,我不是文本到語音領域的專家,但是你的錯誤是你關於不匹配的數據類型。您正在錯誤地投射源目標。 – Cabrra
我知道我的錯誤在哪裏,正如我在我的問題中所描述的那樣。 – Macumbaomuerte