首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获发送到Google语音识别服务器的音频

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

Stack Overflow用户
提问于 2011-05-08 12:44:29
回答 3查看 5.7K关注 0票数 5

为了通过谷歌服务器识别语音,我按照Stephananswer to this question中的建议,将SpeechRecognizer类与RecognitionListener结合使用。此外,我尝试使用onBufferReceived()从RecognitionListener回调来捕获正在识别的音频信号,如下所示:

代码语言:javascript
复制
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最终连接到谷歌服务器,识别结果表明收到了一个完整的音频信号;只有sig阵列缺少一些音频块。

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

EN

回答 3

Stack Overflow用户

发布于 2011-05-10 14:56:54

我倾向于说,这可能是识别服务的行为不一致,甚至可能是你使用的Android版本中的一个bug。但是,文档指出,不能保证此方法会被调用,因此它将适合规范。到目前为止,我注意到的是(在安卓2.3.4上):我在记录时获取字节数,但如果有一个SocketTimeout,它会在一段时间后尝试将数据重新发送到服务器,但不会再次调用onBufferReceived来获取相同的数据。用于测试的代码与您在帖子中链接的代码相同。

为什么你认为你在方法中接收到的音频中缺少了一些块?如果只是丢失了几个块,情况甚至可能是这样的,尽管这些块丢失了,但识别仍然有效。

票数 1
EN

Stack Overflow用户

发布于 2016-02-03 23:26:39

在最新的版本中,onBufferReceieved不能工作,你可以检查record/save audio from voice recognition intent

票数 1
EN

Stack Overflow用户

发布于 2018-05-29 19:15:31

要做到这一点,最好的方法是绕过另一条路。使用AudioRecord捕获音频数据(我建议使用VOICE_COMMUNICATION而不是MIC作为输入,这样可以获得真正干净的音频),然后将其传递给SpeechRecognizer。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5925657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档