Android SpeechRecognition上的麦克风停止工作

时间:2019-11-21 09:58:06

标签: javascript android react-native speech-recognition

我在使用react native制作的应用程序上使用android SpeechRecognition。使用的库是react-native-voice。

该应用程序始终一直在监听输入的句子,并将其通过4个网络套接字发送到4个服务器。

每次触发startSpeech()onEndOfSpeech()时,我都会继续监听onError()的呼叫。

问题是,仅在某些设备(例如便宜的android设备)上,当我运行应用程序时,经过一段随机的时间(从正常工作的5分钟到2个小时),麦克风停止工作:java使用onRmsChanged() java方法成功重新启动SpeechRecognition之后,方法startSpeech()会继续返回-2.12(与应用程序停止监听或完成识别某些东西时返回的值相同)。似乎由于某种崩溃或资源不可用,麦克风停止了收听。发生这种情况时,我先致电destroySpeech(),然后再致电startSpeech(),但在尝试了一次或多次识别之后,它仍然停止工作。如果我从android UI中关闭并重新打开该应用程序,则它具有与上述相同的行为(正常工作5至20分钟后,speechRecognition会崩溃,然后继续崩溃)

我进行了某种修复,以在onRmsChanged()连续返回20次以上错误值后重新启动SpeechRecognition,以使其尽可能保持糊涂,但这不是解决方案,原因不能保证在运行应用程序期间将调用onRmsChanged()

我正在使用

Android 7.0
物理设备
Android构建工具28.0.3
gradle 3.3.1
反应本色0.59.8
react-native-voice 0.3.0

除Google App,Google Play服务和我的应用程序之外,手机中的所有应用程序均不得使用通知,使用其他应用程序以及访问麦克风。

我会问:后台是否有另一种服务可以这种方式控制Android系统中的麦克风资源?还是可能是语音识别崩溃?

这是react-native的日志,其中“ true”是方法isAvailable()返回的值(如果系统中可用的SpeechRecognition),“ volume” n是onRmsChanged()返回的值: / p>

9-27 11:52:30.425 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082
9-27 11:52:30.431 16130 16424 I ReactNativeJS: true 
9-27 11:52:30.495 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082
9-27 11:52:30.499 16130 16424 I ReactNativeJS: true 
9-27 11:52:30.545 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082
9-27 11:52:30.547 16130 16424 I ReactNativeJS: true 
9-27 11:52:30.557 16130 16424 I ReactNativeJS: speech start 
9-27 11:52:35.636 16130 16424 I ReactNativeJS: 'speech error', { error: { message: '6/No speech input' } } 
9-27 11:52:35.647 16130 16424 I ReactNativeJS: start listening 
9-27 11:52:35.729 16130 16424 I ReactNativeJS: speech start 
9-27 11:52:35.799 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082
9-27 11:52:35.806 16130 16424 I ReactNativeJS: true 
9-27 11:52:35.918 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082
9-27 11:52:35.921 16130 16424 I ReactNativeJS: true 
9-27 11:52:35.967 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:35.969 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.019 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.024 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.069 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.074 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.121 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.128 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.180 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.188 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.222 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.224 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.269 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.272 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.323 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.331 16130 16424 I ReactNativeJS: true 
9-27 11:52:36.373 16130 16424 I ReactNativeJS: 'volume', -2.119999885559082 
9-27 11:52:36.381 16130 16424 I ReactNativeJS: true

谢谢

0 个答案:

没有答案