Изменяя сценарии ExampleAssistant.cs
и ExampleStreaming.cs
, я отправляю сообщения / высказывания в службу Assistant, когда результаты распознавания равны final
, чтобы вести разговор в Unity, как если бы вы печатали в окне чата.
Это означает, что я должен установить для свойства Active
значение false
в методе обработки событий OnRecognize
сценария ExampleStreaming.cs
.
Однако после отправки высказывания и его установки на true
для продолжения прослушивания / записи и распознавания высказываний пользователя служба не запускается снова.
Используя сообщения отладки, я подтвердил, что для свойства действительно установлено значение true
и выполняется метод StartRecording
.
private void OnRecognize(SpeechRecognitionEvent result, Dictionary<string, object> customData)
{
if (result != null && result.results.Length > 0)
{
foreach (var res in result.results)
{
foreach (var alt in res.alternatives)
{
string text = string.Format("{0} ({1}, {2:0.00})\n", alt.transcript, res.final ? "Final" : "Interim", alt.confidence);
ResultsField.text = alt.transcript;
/// Only send the recognized speech utterance to Conversation
/// Assistant once we know the user has stopped talking.
if (res.final)
{
string _conversationString = alt.transcript;
Active = false; /// Stop the microphone from listening.
/// Message.
Dictionary<string, object> input = new Dictionary<string, object>();
input["text"] = _conversationString;
MessageRequest messageRequest = new MessageRequest()
{
Input = input,
};
_exampleAssistantV1_script.SendMessageAssistant(messageRequest);
/// Start listening & recording
/// with the microphone.
Active = true;
StartRecording();
}
}
}
}
}
На самом деле он попадает в предложение else
свойства Active
, что означает, что все в порядке, кроме того, что value
не установлено.
Может кто-нибудь помочь мне понять, почему это происходит, или почему свойство не установлено, или почему служба не возобновляется? Конечно, сервис не возобновляется, потому что свойство не установлено, но что я делаю не так?
public
{
get
{
return _service.IsListening;
}
set
{
if (value && !_service.IsListening)
{
_service.RecognizeModel = ( string.IsNullOrEmpty(_recognizeModel) ? "en-US_BroadbandModel" : _recognizeModel);
_service.DetectSilence = true;
_service.EnableWordConfidence = true;
_service.EnableTimestamps = true;
_service.SilenceThreshold = 0.01f;
_service.MaxAlternatives = 0;
_service.EnableInterimResults = true;
_service.OnError = OnError;
_service.InactivityTimeout = -1;
_service.ProfanityFilter = false;
_service.SmartFormatting = true;
_service.SpeakerLabels = false;
_service.WordAlternativesThreshold = null;
_service.StartListening(OnRecognize, OnRecognizeSpeaker);
}
else if (!value && _service.IsListening)
{
_service.StopListening();
}
}
}