结合Android语音识别:错误代码2

时间:2018-09-23 02:46:17

标签: c# android unity3d speech-recognition

我目前正在尝试使用Asset Store中的Mobile Speech Recognizer插件在Unity项目中实现android语音识别。一般来说,这是我第一次使用语音识别。

当前问题是我不断收到Android Speech Recognizer错误代码2,这意味着还有其他与网络相关的错误。搜索解决方案2天后,我无法解决此错误。我还尝试阅读资产文档并联系开发人员。

我使用Unity开发项目,并使用Android Studio仿真器测试和运行该项目,因为Unity本身无法运行Speech Recognizer插件。以下是分别在SetLanguage场景和ExampleScene场景上使用的两个脚本。请不要介意手动设置检测语言,因为我希望该项目始终使用英语。

如果对“其他与网络相关的错误”有更清晰的定义,请说清楚,因为它有点含糊。

SetLanguage场景

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 :-)";
        }
    }
}

0 个答案:

没有答案