小编srf*_*srf的帖子

如何处理ERROR_RECOGNIZER_BUSY

在我的基于语音识别的应用程序中,我有时会收到ERROR_RECOGNIZER_BUSY.直觉上,这需要...... 重试,对吧?

问题是这个错误是非常无证的,所以很明显我有些问题可能是在该领域更有经验的人能够回答:

  1. 什么触发了这样的错误?它真的只是繁忙的服务器(在谷歌)?或者这也可以暗示我的应用程序中的错误?
  2. 在重试之前,我是否必须明确关闭/重新打开会话?
  3. 多久重试一次?每1秒一次?每5秒钟?其他?

我们非常欢迎您经验丰富的见解.谢谢.

android speech-recognition voice-recognition

25
推荐指数
1
解决办法
6282
查看次数

有没有支持麦克风输入的android模拟器?

到目前为止,我还没有找到任何可以让我通过 Android模拟器上的麦克风测试语音输入的解决方案.

通过限制我对廉价Android手机的测试,我已经能够在开发过程中逃脱(对不起,我没有多少钱),但现在一些用户抱怨我的应用程序无法在Android 3和4上运行.

所以,我拼命寻找一个Android模拟器(可以在Windows 7上运行)来帮助我在各种Android版本上测试我的基于麦克风的应用程序(我说过碎片吗?)

没有支持麦克风输入的 android模拟器?

其他可以使用标准Android"模拟器"的建议?

android microphone android-emulator

23
推荐指数
2
解决办法
1万
查看次数

如何最小化GC_FOR_ALLOC次数?

我的应用程序导致这些可怕的GC_FOR_ALLOC在特定位置(方法)多次发生:

12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms
12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms
12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms
12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms
12-29 22:20:30.495: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 16ms
12-29 22:20:30.499: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 15ms
Run Code Online (Sandbox Code Playgroud)

我很清楚我在内存管理方面做错了(是的,垃圾收集很棒,但仍然没有让我免除责任,知道何时以及如何分配).

您能否推荐一种故障排除方法或技术,可以引导我找到令人讨厌的代码行和可能的解决方案?

java android garbage-collection memory-management dalvik

19
推荐指数
1
解决办法
2万
查看次数

为什么在Android模拟器上使用语音记录器是不可能的?

我正在尝试运行Android 2.2模拟器附带的Speech Recorder.问题是我点击"录制"按钮的那一刻:

在此输入图像描述

它中止了一条错误消息"应用程序语音记录器(进程com.android.speechrecorder)意外停止.请再试一次."

在此输入图像描述

问题是再次尝试并没有帮助.

现在,我搜索了StackOverflow,我梳理了整个互联网,我找到了许多相同问题的报告,没有任何可行的解决方案.

我的结论是,由于一些奇怪的原因,Android模拟器能够使用Windows音频设备进行输出,但不能用于输入.

这是为什么?

我知道其他虚拟化软件(例如VMWare)使用主机音频设备的输出和输入部分都没有问题.

此外,如果Speech Recorder从未为任何人的模拟器工作,为什么要把它放在那里?

当然这对某人有用.有没有办法让Speech Recorder为我工作?

我使用的是32位Windows XP,我的AVD是用SD卡定义的(启动时安装).

更新:我按照@Klaus的建议尝试查看是否抛出任何异常.我这样做只需在命令行输入ddms.bat即可启动独立版本的DDMS(底部有一个logcat显示).果然,点击"录制"按钮后我收到以下异常:

03-29 14:16:58.195: ERROR/AudioRecord(303): Could not get audio input for record source 1
03-29 14:16:58.195: ERROR/srec_jni(303): initCheck error -22 
03-29 14:16:58.205: DEBUG/SpeechRecorderActivity(303): run audio capture thread
03-29 14:16:58.205: WARN/dalvikvm(303): threadid=8: thread exiting with uncaught exception (group=0x4001d800)
03-29 14:16:58.215: ERROR/AndroidRuntime(303): FATAL EXCEPTION: Thread-9
03-29 14:16:58.215: ERROR/AndroidRuntime(303): java.lang.NullPointerException
03-29 14:16:58.215: ERROR/AndroidRuntime(303):     at com.android.speechrecorder.SpeechRecorderActivity$4.run(SpeechRecorderActivity.java:192)
03-29 14:16:58.285: WARN/ActivityManager(59):   Force finishing activity com.android.speechrecorder/.SpeechRecorderActivity
03-29 14:16:58.904: DEBUG/dalvikvm(59): GC_FOR_MALLOC …
Run Code Online (Sandbox Code Playgroud)

android microphone audio-recording android-emulator

13
推荐指数
1
解决办法
7758
查看次数

哪个Android版本引入了SpeechRecognizer的Audible Cue onReadyForSpeech?

安卓2.X并不会自动发出声音提示时,准备演讲输入.

Android 4.1的确如此.

这些版本之间会发生什么?即什么时候介绍这个很酷的功能?

  • Android 3.0?(Build.VERSION_CODES.HONEYCOMB_MR)
  • Android 3.1?(Build.VERSION_CODES.HONEYCOMB_MR1)
  • Android 3.2?(Build.VERSION_CODES.HONEYCOMB_MR2)
  • Android 4.0?(Build.VERSION_CODES.ICE_CREAM_SANDWICH)

我需要这个,以便Build.VERSION.SDK_INT在运行时执行检查.

你知道有哪些来源记录这个吗?

android speech-recognition

13
推荐指数
1
解决办法
505
查看次数

RecognitionListener.onError()会自动SpeechRecognizer.cancel()吗?

由于各种原因,我需要使用原始SpeechRecognizerAPI而不是更简单的RecognizerIntent(RECOGNIZE_SPEECH)活动.

这意味着,除其他外,我需要处理RecognitionListener.onError()自己.

为了回应一些错误,我只想重新开始听.这看起来很简单但是当我只是调用SpeechRecognizer.startListening()错误时,这有时似乎会触发两个不同的错误:

 ERROR/ServerConnectorImpl(619): Previous session not destroyed
Run Code Online (Sandbox Code Playgroud)

"concurrent startListening received - ignoring this call"
Run Code Online (Sandbox Code Playgroud)

在尝试SpeechRecognizer.startListening()再次打电话之前,我应该做一些清理工作.

如果这是真的,则意味着在RecognitionListener错误时,不会自动停止和/或取消侦听.

某些错误也可能会停止/取消收听,而其他错误则不会.实际上只有9个SpeechRecognizer错误:

  1. ERROR_NETWORK_TIMEOUT
  2. ERROR_NETWORK
  3. ERROR_AUDIO
  4. ERROR_SERVER
  5. ERROR_CLIENT
  6. ERROR_SPEECH_TIMEOUT
  7. ERROR_NO_MATCH
  8. ERROR_RECOGNIZER_BUSY
  9. ERROR_INSUFFICIENT_PERMISSIONS

由于文档不是非常详细地说明哪个错误取消了哪个错误,哪个没有取消,你是否根据自己的经验知道哪些错误需要在再次尝试之前进行清理(以及在何种程度上)SpeechRecognizer.startListening()

android speech-recognition voice-recognition

11
推荐指数
1
解决办法
5434
查看次数

是否有Cygwin的Cygwin版本?

Android的NDK需要双方 的Cygwin GNU制作.由于我已经安装了最新和最好的Cygwin,我认为GNU Make必须已经包含在其中,因为Cygwin非常适合开发人员.

但我找不到任何东西,无论是在我的本地安装中,还是在软件包列表中,这让我很好奇地理解为什么在所有GNU软件包中,这是Cygwin选择不包含的软件包.

或者也许这样的Cygwin版本的GNU make存在而我却找不到它?

如果是这样,我在哪里/如何下载它?

cygwin gnu-make

10
推荐指数
1
解决办法
1万
查看次数

RecognitionListener.onReadyForSpeech()中的DTMF音调被误认为是语音

从您通过startActivityForResult()调用它之前,Google语音搜索会显着延迟,直到显示其对话框,准备好发表演讲.

这要求用户在说话之前始终查看屏幕,等待显示对话框.

所以我想通过实现RecognitionListener并在onReadyForSpeech()中发出DTMF音来生成声音信号而不是对话框,如下面的代码片段所示:

  @Override
  public void onReadyForSpeech(Bundle params) {
    Log.d(LCTAG, "Called when the endpointer is ready for the user to start speaking.");
    mToneGenerator.startTone(ToneGenerator.TONE_DTMF_1);
    try {
      Thread.sleep(50);
    } catch (InterruptedException e) {
      Log.e(LCTAG, "InterruptedException while in Thread.sleep(50).");        
      e.printStackTrace();
    } // SystemClock.sleep(50);
    mToneGenerator.stopTone();
  }
Run Code Online (Sandbox Code Playgroud)

音调听起来很漂亮但是......它也被麦克风"听到",到达语音识别服务并始终产生识别错误ERROR_NO_MATCH.

有办法解决这个问题吗?

android speech-recognition voice-recognition

9
推荐指数
1
解决办法
1506
查看次数

SystemClock.sleep()与Thread.sleep()在等待信号量循环时

为了同步/队列访问共享资源,我将使用信号量,在等待循环的帮助下.

为了不碰到CPU挂钩,我想sleep()在那个while循环中稍微进行一下.

我搜索了http://developer.android.com参考,发现了两个这样的sleep()函数,我很困惑哪个适合哪种情况:

  1. Thread.sleep()方法
  2. SystemClock.sleep()

哪一个更适合我描述的情况,为什么?

multithreading android sleep thread-sleep

9
推荐指数
1
解决办法
2万
查看次数

如果没有立即说话,JellyBean中的RecognitionListener会冻结

我正在开发的基于语音识别的应用程序适用于从API 8(Android 2.2)开始的所有Android版本.

但是在Nexus S 4G(Android 4.1.1)上,RecognitionListener将暂停大约1分钟,然后通过其onError()回调发出ERROR_SERVER .

如果在1-2秒内(在onReadyForSpeech上发出哔哔声)说话,它将按预期正常运行.

在JellyBean中有什么变化可以解释这种行为?

更重要的是,是否有一种方法可以使其在旧版本的Android中表现得像?(即继续听,如果没有在默认的10秒内说出,则发出ERROR_SPEECH_TIMEOUT )

android speech-recognition android-4.2-jelly-bean

9
推荐指数
1
解决办法
1138
查看次数