私は、チャットボットを持ち、LypSync用のSALSAアセットと一緒にテキストを音声化するためにSAPIを使用しているアプリケーションを構築しています。私が達成しようとしているのは、TTSオーディオ出力から直接フィードするライブAudioSourceを作成することです。私は正常にこれを達成するために、各文章のwavファイルに保存し、LypSyncなどを持つGameObjectにランタイムでwavファイルをロードする。これはうまくいくが、wavファイルの継続的な読み込みは、アプリケーションを遅くし、それとクラッシュすることさえします。Unity AudioSourceとしてSAPI(Microsoft text to speech API)からSpeechlibを使用する
コンピューター上のマイクからライブオーディオソースを作成することは可能です。だから私がやりたいことはそれのようなものです。
私は論理的な方法で私の素朴なレベルのプログラマを試しました。
TTSvoice.AudioOutputStream = AudioSource.clip;
と、このエラーを取得:
error CS0029: Cannot implicitly convert type UnityEngine.AudioClip' to SpeechLib.ISpeechBaseStream'`SpeechLib.ISpeechBaseStream'
私はPythonであなたがnumpyのスルー異なるライブラリーからオーディオオブジェクトを接続することができます知っているだけで、このように、AudiSourceオーディオクリップとしてTTSからudioOutputストリームを接続しますオーディオを標準の生の配列データに変換します。しかし、私も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