添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
强悍的双杠  ·  js byte数组转base64-掘金·  1 年前    · 
有胆有识的炒饭  ·  【Visual ...·  1 年前    · 
谦虚好学的钥匙  ·  如何在Power ...·  1 年前    · 

使用嵌入式TTS在Android上进行离线语音识别

1 人关注

我很想看看在安卓系统上使用谷歌TTS是否可以进行离线语音识别,并试图使其发挥作用,但没有成功。我正在开发一个安卓应用,要求用户对着手机说出一个 "神奇的词",手机听到正确的词就会做出反应。当我连接到网络时,语音识别工作得很好,但我需要让它在离线状态下工作。

我在翻阅安卓文档时发现了这个问题。[KEY_FEATURE_EMBEDDED_SYNTHESIS][1] 文档说要用getFeatures(Locale)检索功能,看看引擎支持哪些功能。它返回了两个特征:Google文本到语音引擎的embeddedTts和networkTts,所以embeddedTts特征是可用的。在下面代码的第3行,我根据Android文档启用了这个功能,但似乎没有效果。我还试着把networkTts功能设置为false,这也没有改变行为。只要我没有连接到数据网络,我就会得到 "目前无法到达谷歌 "的错误。

我希望这里有人能帮助我了解如何使用embeddedTts。

我正在运行Android 4.1.1的三星Galaxy S3上测试我的应用程序。

以下是相关代码。

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        HashMap<String, String> localSpeech = new HashMap<String, String>();
        localSpeech.put(TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS, "true");
          if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
ArrayList<String> matches = data.getStringArrayListExtra(
                RecognizerIntent.EXTRA_RESULTS);
        if (matches.size() == 0)
            tts.speak("Heard nothing", TextToSpeech.QUEUE_FLUSH, null);
        } else {
            String mostLikelyThingHeard = matches.get(0); 
            String magicWord = "Magic";
            if (mostLikelyThingHeard.equals(magicWord)) {
                //tts.speak("You got it!", TextToSpeech.QUEUE_FLUSH, null);
                tts.speak("You got it!", TextToSpeech.QUEUE_FLUSH, localSpeech);
            } else {
                tts.speak("The magic word is not " + mostLikelyThingHeard + " try again", TextToSpeech.QUEUE_FLUSH, localSpeech);
    else {
        Log.d("APP", "result NOT ok");