Unity с распознаванием речи Android: код ошибки 2 - PullRequest
0 голосов
/ 23 сентября 2018

В настоящее время я пытаюсь реализовать распознавание речи для Android в проекте Unity с помощью плагина Mobile Speech Recognizer в Asset Store.Я впервые использую распознавание речи в целом.

В настоящее время я продолжаю получать код ошибки распознавателя речи Android 2, что означает наличие других ошибок, связанных с сетью.После 2 дней поиска решения я не смог устранить эту ошибку.Я также попытался прочитать документацию по ресурсам и связаться с разработчиком.

Я использую Unity для разработки проекта и Android Studio Emulator для тестирования и запуска проекта, так как Unity сам по себе не может запустить плагин Speech Recognizer.Ниже приведены два сценария, которые используются в сцене SetLanguage и в сцене ExampleScene соответственно.Пожалуйста, не обращайте внимания на ручную настройку языка обнаружения, так как я хотел, чтобы проект всегда использовал английский.

Если есть более четкое определение «других ошибок, связанных с сетью», пожалуйста, скажите, что это немного расплывчато,

SetLanguage Scene

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using UnityEngine.UI;
using KKSpeech;

namespace KKSpeech {
    public class SpeechRecognitionLanguageDropdown : MonoBehaviour {

        private Dropdown dropdown;
        private List<LanguageOption> languageOptions;

        void Start () {
            dropdown = GetComponent<Dropdown>();
            dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
            //dropdown.ClearOptions();lo    
            dropdown.options[0].text = "en-US";

            GameObject.FindObjectOfType<SpeechRecognizerListener>().
                onSupportedLanguagesFetched.
                AddListener(OnSupportedLanguagesFetched);

            SpeechRecognizer.GetSupportedLanguages();
            SpeechRecognizer.SetDetectionLanguage("en-US");
        }   

        // remember to add ExampleScene to Build Settings!
        public void GoToRecordingScene() {
            SceneManager.LoadScene("ExampleScene");
        }

        void OnDropdownValueChanged(int index) {
            LanguageOption languageOption = languageOptions[index];

            //SpeechRecognizer.SetDetectionLanguage(languageOption.id);
            SpeechRecognizer.SetDetectionLanguage("en-US");
        }

        void OnSupportedLanguagesFetched(List<LanguageOption> languages) {
            List<Dropdown.OptionData> dropdownOptions = new List<Dropdown.OptionData>();

            foreach (LanguageOption langOption in languages) {
                dropdownOptions.Add(new Dropdown.OptionData(langOption.displayName));
            }
            //dropdownOptions.Add(new Dropdown.OptionData("English (United States)"));
            dropdown.AddOptions(dropdownOptions);

            languageOptions = languages;
        } 

    }
}

ExampleScene

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using KKSpeech;

public class RecordingCanvas : MonoBehaviour {

    public Button startRecordingButton;
    public Text resultText;

    void Start() {
        if (SpeechRecognizer.ExistsOnDevice()) {
            SpeechRecognizerListener listener = GameObject.FindObjectOfType<SpeechRecognizerListener>();
            listener.onAuthorizationStatusFetched.AddListener(OnAuthorizationStatusFetched);
            listener.onAvailabilityChanged.AddListener(OnAvailabilityChange);
            listener.onErrorDuringRecording.AddListener(OnError);
            listener.onErrorOnStartRecording.AddListener(OnError);
            listener.onFinalResults.AddListener(OnFinalResult);
            listener.onPartialResults.AddListener(OnPartialResult);
            listener.onEndOfSpeech.AddListener(OnEndOfSpeech);
            startRecordingButton.enabled = false;
            SpeechRecognizer.RequestAccess();
        } else {
            resultText.text = "Sorry, but this device doesn't support speech recognition";
            startRecordingButton.enabled = false;
        }    
    }

    public void OnFinalResult(string result) {
        resultText.text = result;
    }

    public void OnPartialResult(string result) {
        resultText.text = result;
    }

    public void OnAvailabilityChange(bool available) {
        startRecordingButton.enabled = available;
        if (!available) {
            resultText.text = "Speech Recognition not available";
        } else {
            resultText.text = "Say something :-)";
        }
    }

    public void OnAuthorizationStatusFetched(AuthorizationStatus status) {
        switch (status) {
        case AuthorizationStatus.Authorized:
            startRecordingButton.enabled = true;
            break;
        default:
            startRecordingButton.enabled = false;
            resultText.text = "Cannot use Speech Recognition, authorization status is " + status;
            break;
        }
    }

    public void OnEndOfSpeech() {
        startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
    }

    public void OnError(string error) {
        Debug.LogError(error);
        resultText.text = "Something went wrong... Try again! \n [" + error + "]";
        startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
    }

    public void OnStartRecordingPressed() {
        if (SpeechRecognizer.IsRecording()) {
            SpeechRecognizer.StopIfRecording();
            startRecordingButton.GetComponentInChildren<Text>().text = "Start Recording";
        } else {
            SpeechRecognizer.StartRecording(true);
            startRecordingButton.GetComponentInChildren<Text>().text = "Stop Recording";
            resultText.text = "Say something :-)";
        }
    }
}
...