android – 捕获发送到Google语音识别服务器的音频

为了识别Google服务器的语音,我将SpeechRecognizer类与RecognitionListener结合使用,如
Stephan
answer
this question所示.另外,我尝试通过使用来自RecognitionListener的onBufferReceived()回调来捕获被识别的音频信号,如:

byte[] sig = new byte[500000] ;
int sigPos = 0 ;
...
public void onBufferReceived(byte[] buffer) {
  System.arraycopy(buffer, 0, sig, sigPos, buffer.length) ;
  sigPos += buffer.length ;
}
...

这似乎工作正常,除非当SpeechRecognizer无法连接到Google服务器时,当一大块音频未复制到上述sig数组中时,会抛出HTTP连接超时异常. SpeechRecognizer最终连接到Google服务器,识别结果表明收到了完整的音频信号;只有sig数组缺少一些音频块.

有没有人遇到同样的问题?任何提示解决方案?谢谢!

最佳答案 我倾向于说这可能是识别服务行为的不一致,甚至可能是您使用的Android版本中的错误.但是,文档指出,不能保证调用此方法以使其适合规范.到目前为止我注意到的是(在Android 2.3.4上):我在录制时得到了字节,但是如果有一个SocketTimeout它会在一段时间后尝试将数据重新发送到服务器,但是没有再次调用onBufferReceived相同的数据.用于测试的代码与您在帖子中链接的代码相同.

为什么您认为在方法中收到的音频中缺少一些块?如果只缺少几个块,甚至可能是这样的,虽然那些块丢失了,但识别仍然有效.

点赞