当前位置: 首页 > 知识库问答 >
问题:

将Android语音识别添加到现有应用程序

韦飞尘
2023-03-14

我有一个工作应用程序,我想添加语音命令。当前应用程序定期(定时器)通过蓝牙来回传输数据。用户可以按按钮和NumberPickers来修改通过蓝牙发送的数据。还有从蓝牙链接接收到的数据,并显示在文本视图中。此应用程序目前工作正常。

我想做的是添加语音命令功能,以便用户可以选择按下按钮/数字选择器,或者可以仅使用语音命令更改值。

我测试了一些可以在各种网站上找到的从语音到文本的例子。我成功地测试了一个使用RecognizerIntent的应用程序。按下按钮后,会弹出一个对话框,您可以说出单词或短语,并在屏幕上正确显示结果。

所以,我想我很接近了,但我真的不确定如何将语音转换为文本与我当前的蓝牙应用程序相结合。我不希望用户必须按下按钮,我只希望应用程序能够不断地收听。另外,我不想在屏幕上弹出语音对话框。

我的硬件是运行Android 4.1的三星平板电脑。

我对Android编程比较陌生,所以任何建议(无论多么基本)都非常感谢。谢谢

共有1个答案

糜帅
2023-03-14

要防止屏幕上弹出语音对话框,您可以使用ACTION_RECOGNIZE_SPEECH意图:

private static int SR_CODE = 123;


/**
     * Initializes the speech recognizer and starts listening to the user input
     */
    private void listen()  {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        //Specify language
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH)
        // Specify language model
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        // Specify how many results to receive
        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
        // Start listening
        startActivityForResult(intent, SR_CODE);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SR_CODE && resultCode == RESULT_OK)  {
                if(data!=null) {
                //Retrieves the best list SR result
                ArrayList<String> nBestList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
               String bestResult = nBestList.get(0);
               Toast.makeText(getApplicationContext(), bestResult, Toast.LENGTH_LONG).show;              
            }else {         
                //Reports error in recognition error in log
                Log.e(LOGTAG, "Recognition was not successful");
            }

    }

关于另一个问题,“我不希望用户必须按下按钮,我只希望应用程序一直在监听”:

我建议使用CMUSphinx连续识别语音。要使用google语音识别api实现连续语音识别,您可能必须求助于后台服务中的循环,这将占用太多资源并耗尽设备电池。

另一方面,Pocketsphinx的效果非常好。它的速度足够快,可以在锁定屏幕后发现关键短语并识别语音命令,而无需用户触摸设备。这一切都是离线完成的。您可以尝试演示。

如果你真的想像我上面演示的那样使用谷歌的api,请看这个

 类似资料:
  • 我想在我的Android应用程序中添加一个语音界面。两个要求: > 我只需要在任何时候从一个小字典中识别单词——基本上是屏幕上的任何可点击元素,并且大多数可点击元素已经有文本,所以从字面上看就是“说你看到的”。 在应用程序可见的情况下进行连续语音识别,尽管我可以忍受在演讲之前说“Ok app”。 实现这一点的最佳方式是什么? 谢谢NickB

  • 我想在我的应用程序中引入一项新功能:永久语音识别。 首先,我关注以下帖子: 语音识别 Android中的语音识别 Android离线语音识别(JellyBean) 还有更多其他人,还有来自不同网站的其他帖子。 问题:实际上,我想做的是在不显示谷歌语音活动的情况下获得永久性的语音识别。例如:当我启动应用程序时,语音识别应该启动并收听。当识别器匹配一些单词时,我的应用程序将相应地执行不同的操作。我不喜

  • 我正在尝试在我的Android应用程序中实现继续语音识别。我已经遵循了这个链接编码。这个继续语音识别在两天前工作。但是现在语音识别工作不好,它将需要更多的时间进行语音监听。如何解决这个问题。请指导我。谢谢 识别编码: 用户开始说话

  • 我正在考虑做一个语音屏幕锁/解锁Android应用程序,作为我的最后一个毕业设计,我遇到了一些问题,当一个按下锁按钮时,我如何打开麦克风,这样它就可以一直听下去,直到密码说出来。 我已经搜索了它,但我只找到了使用RecognizerIntent和其他类Google Speech API的技术。 我需要知道当锁定屏幕显示时,我如何开始收听麦克风,这样我就可以捕捉音频流。不允许我使用任何api,没有谷

  • 我正在寻找一个Android语音识别库。我只需要它来理解“是/否”的答案(用不同的语言,如英语、德语、法语)。 有什么建议吗?

  • [可能重复]但我没有找到下面问题的答案。 在过去的两天里,我一直在做一些语音识别方面的研究,但我的问题没有得到答案: 是否可以将语音识别作为一项服务运行?我想实现这样的功能:虽然我的手机处于睡眠模式,但我需要拨打一个号码