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

Android语音识别器自动停止-需要像Google Bolo应用程序一样实现

欧阳昊阳
2023-03-14

在Android中使用SpeechRecognizer时,我注意到SpeechRecognizer会在几秒钟内自动停止收听。

我正在开发一个需要用户连续语音输入的应用程序。我们的应用程序需要在没有互联网的情况下工作。对于语音识别,我们使用SpeechRecognitor类。

以下是实现:(静态编程语言)

var recognizer = SpeechRecognizer.createSpeechRecognizer(this.applicationContext)
recognizer!!.setRecognitionListener(RecognitionListener(this))

开始聆听

val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.taazaa.texttospeechdemo")
recognizer!!.startListening(intent)

在用户说话时暂停之前,这一直工作正常。

我需要以下实施:

>

  • 语音识别器不应停止监听,直到用户手动停止识别。

    识别器!!。停止侦听()

    每次识别开始或停止时,设备都会发出哔哔声,我需要停止。

    应用程序应该主要在脱机模式下工作。

    让我知道我做错了什么,需要实施什么来支持以上两点。谷歌Bolo正在这样做,所以可能有办法。Google bolo:https://play.google.com/store/apps/details?id=com.google.android.apps.seekh

    我尝试了许多链接,其中一些链接如下:

    Android中的离线语音识别

    Android离线语音识别(JellyBean)

    如何处理ERROR\u RECOGNIZER\u BUSY

    Android上的语音到文本

  • 共有1个答案

    时同
    2023-03-14

    您可以看看这个使用SpeechRecognitor而不使用internet的示例:

    • https://github.com/cryptocat-miner/SpeechRecognizerSample

    顺便说一下,这是日本语。

    关于持续的倾听。。。Android的语音识别器库有点棘手。不久前我就这样做了,问题是设备的麦克风。如果它在某种程度上被什么东西阻挡或打断,比如说入口被什么东西盖住了,或者某人正在使用免提(蓝牙,这也是另一回事),那么结果不会是百分之百的成功。

    我建议您使用组件服务。这将使SpeechRecognizer持续运行。但想想这些州:

    • 听-

    **在这个过程中,应用程序可能无法监听,你也需要处理这个问题。

    由于组件服务在后台运行,您需要将其与您的活动或片段连接起来(可能使用活页夹或广播,具体取决于您的应用程序)

    class ServiceSpeech : Service(), RecognitionListener {
    
        val mVoiceBinder: IBinder = LocalBinder()
    
        override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
            return START_STICKY
        }
    
        inner class LocalBinder : Binder() {
            fun getService(): ServiceSpeech? {
                return this@ServiceSpeech
            }
        }
    
        /*
        *
        * create the methods for:
        * build speechrecognizer
        * startlistening
        * stoplistening
        * listeningAgain
        * send the results to activity/fragment
        *
        * */
    
        override fun onBind(p0: Intent?): IBinder? {
            return mVoiceBinder
        }
    
        override fun onReadyForSpeech(p0: Bundle?) {
            //important
        }
    
        override fun onBeginningOfSpeech() {
            //important
        }
    
        override fun onError(p0: Int) {
            //important, you could check SpeechRecognizer.ERROR_* to handle the errors
        }
    
        override fun onRmsChanged(p0: Float) {
            //handle some events, will give you the sound intensity
        }
    
        override fun onPartialResults(p0: Bundle?) {
            //important
        }
    
        override fun onResults(p0: Bundle?) {
            //important
        }
    
        override fun onEndOfSpeech() {
            //important
        }
    
        override fun onEvent(p0: Int, p1: Bundle?) {
        }
    
        override fun onBufferReceived(p0: ByteArray?) {
        }
    }
    

    我希望这能帮助你。

     类似资料:
    • 我想制作一个语音识别器应用程序来转录用户的语音。我不想在这样做的时候有任何对话,所以是不可能的。(我知道如果我使用这种方法,我可以获得音频) 我正在使用SpeechRecognitor,并调用startListening来收听用户的音频。我在onResults中得到了非常准确的结果。 现在,我还需要在我的设备SD卡中存储用户的音频。为此,我尝试了MediaRecorder和AudioRecord,

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

    • 我有一个工作应用程序,我想添加语音命令。当前应用程序定期(定时器)通过蓝牙来回传输数据。用户可以按按钮和NumberPickers来修改通过蓝牙发送的数据。还有从蓝牙链接接收到的数据,并显示在文本视图中。此应用程序目前工作正常。 我想做的是添加语音命令功能,以便用户可以选择按下按钮/数字选择器,或者可以仅使用语音命令更改值。 我测试了一些可以在各种网站上找到的从语音到文本的例子。我成功地测试了一个

    • 我做了很多研究,并尝试了离线pocket sphinx,但它接收了周围的声音,对我的应用程序做出了不同的反应。以上kitkat 4.4是否有谷歌离线应用程序。。我从两周后就开始尝试了。感谢您宝贵的回答。 详细信息:当活动开始时,第一个文本必须在完成后读取内容(文本到语音),读取语音识别必须根据命令例如:(下一步、上一步、前进、选项、1、2、3、4等)进行语音和语音识别。根据命令,它必须在on结果方

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

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