谷歌音频API现在非常的火,一年前我在web上实现了在线录音与在线解析(类似同声传译功能),现在给大家分享分享使用经验。
下面对常出现的问题和误区做一个解答。
1.错误码翻译(非常重要)
ABORTED (numeric value 1)
The user or a script aborted speech input.
AUDIO (numeric value 2)
There was an error with recording audio.
NETWORK (numeric value 3)
There was a network error, for implementations that use server-side recognition.
NO_SPEECH (numeric value 4)
No speech heard before nospeechtimeout.
NO_MATCH (numeric value 5)
Speech was heard, but could not be interpreted in the specified language and language model.
BAD_GRAMMAR (numeric value 6)
There was an error in the speech recognition grammar.
The message attribute must return an error message describing the details of the error encountered. This attribute is primarily intended for debugging and developers should not use it directly in their application user interface.
我翻译水平有限,英文好的朋友,请直接看上面英文原文。英文一般的,请不要跳过下文。
中止(对应返回码 1)
用户自己或者某个脚本语言中断了语音输入。
音频错误(对应返回码 2)
录音的时候出现错误。
网络错误(对应返回码 3)
调用谷歌服务器识别音频时出现网络传输错误。
没捕捉到音频(对应返回码 4)
在超时时间内没人发音。
直接调用谷歌音频API时,不会出现以上错误,以上错误是用来捕获在webkit内核浏览器(例如Chrome)上,用户点击录音按钮时的异常。
不匹配(对应返回码 5)
服务端已接收到音频文件,音频文件的语言与语言模型不匹配。
直接调用谷歌音频API时,如果有错误一般会返回错误码5。意思是音频文件的格式与解码器不匹配。比如.wav文件用mpeg解码。
语法错误(对应返回码 6)
语音识别有语法错误。
这是服务器接口内部代码的bug,与客户端调用关系不大。
2.常见问题解答
问:支持***音频格式吗?为什么我的mp3格式用不了??
我自己测试过绝对能用的格式有:wav,flac;网友们测试能用的格式有:SPEEX,amr;因为时间有限我没去测试SPEEX,amr格式,但是操作方法应该大同小异。
下面解答为什么格式是对的,但就是解析不了;
首先你的代码一定要是对的,代码的操作流程是:先把你的音频文件用字符的方式读出来(没必要用什么二进制方式读,你用记事本打开是什么样的字符,谷歌服务器需要的就是什么样的字符),再POST到谷歌的服务器,一定要设置Content-Type:属性字段;
确定代码没问题之后,如果还是解析不了,问题大多出现在Content-Type:属性字段上。如下:
Content-Type:audio/L16; rate=8000 ,audio一般不会出错,rate容易出错。解决办法:
常见的频率参数如下:8000,11025,16000,22050,32000,44100,48000。不想用工具检测音频模式的话,请自己一个一个测试。到这里还不能解决你的问题,请留言告诉我。
3.音频文件太长的解决办法。
可以尝试在代码里面将音频文件分段处理,但是不同音频的分段方式不同,请查看音频编码。我将flac格式的音频直接用代码分过段,遗憾的是只能解析第一段和最后一段数据。