Использование свойства Active потоковой передачи речи в текст для отправки бесед помощнику - PullRequest
0 голосов
/ 09 января 2019

Изменяя сценарии 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();
        }
    }
}
...