【发布时间】:2019-07-08 05:00:39
【问题描述】:
在我的ExampleStreaming.cs 脚本中,一旦用户话语被识别为final,我将它发送到Watson Assistant 服务和Tone Analyzer。因为我将每个服务的脚本按原样分开,所以我必须在每个脚本中进行调用才能访问其他服务。您可以在下面看到我对Tone Analyzer 的调用(.SendToneAnalysis 方法):
private void OnRecognize(SpeechRecognitionEvent result, Dictionary<string, object> customData)
{
blah blah blah . . .
/// Only send the recognized speech utterance to the
/// Assistant once we know the user has stopped talking.
if (res.final)
{
string _conversationString = alt.transcript;
Runnable.Run( StopRecording(1f) ); // Stop the microphone from listening.
/// Message.
Dictionary<string, object> input = new Dictionary<string, object>
{
["text"] = _conversationString
};
MessageRequest messageRequest = new MessageRequest()
{
Input = input,
Context = _Context
};
_exampleAssistantV1_script.SendMessageAssistant(messageRequest);
_exampleToneAnalyzer.SendToneAnalysis(_conversationString);
. . .
在我的ExampleToneAnalyzer.cs 脚本中,我对事件处理方法进行了简单调用,这些方法旨在联系服务并处理成功和失败:
public void SendToneAnalysis(string conversationString)
{
_service.GetToneAnalyze(OnGetToneAnalyze, OnFail, conversationString);
}
这些调用通常使用 StartCoroutines 进行,特别是在 Watson Unity SDK 中,有一个专门的 Runnable.Run,它本质上是一个帮助程序类,用于运行协同例程,而不必从 MonoBehavior 继承。
我的问题是我对服务的简单方法调用在某些情况下是否会出现问题,或者可能只是错误或糟糕的编程,或者使用该方法而不是类似以下的方法是否完全可以:
public void SendToneAnalysis(string conversationString)
{
Runnable.Run( SendAssistantToneAnalysis(conversationString) );
}
private IEnumerator SendAssistantToneAnalysis(string conversationString)
{
if ( !_service.GetToneAnalyze(OnGetToneAnalyze, OnFail, conversationString) )
{
Log.Debug("ExampleToneAnalyzer.SendAssistantToneAnalysis()", "Failed to analyze!");
}
while (!_UserUtteranceToneTested)
yield return null;
}
【问题讨论】:
标签: unity3d ibm-watson coroutine