mat*_*teo 9 android speech-recognition google-api audio-recording
Android的SpeechRecognizer显然不允许将您正在进行语音识别的输入记录到音频文件中.也就是说,要么使用MediaRecorder(或AudioRecord)录制语音,要么使用SpeechRecognizer进行语音识别,在这种情况下,音频不会记录到文件中(至少不能录制到一个文件); 但你不能同时做到这两件事.
多次询问如何在Android中同时录制音频和进行语音识别的问题,最流行的"解决方案"是录制一个flac文件并使用Google的非官方语音API,允许你发送一个flac通过POST请求提交文件并获取带有转录的json响应. http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/(过时的Android版) https://github.com/katchsvartanian/voiceRecognition/tree/master/VoiceRecognition http:// mikepultz.com/2013/07/google-speech-api-full-duplex-php-version/
这非常有效,但有一个巨大的限制,它不能用于超过大约10-15秒的文件(确切的限制不明确,可能取决于文件大小或可能的单词数量).这使它不适合我的需要.
此外,将音频文件切片为较小的文件不是一种可能的解决方案; 甚至忘记了在正确的位置(不是在一个单词的中间)正确分割文件的困难,对上述web服务api的许多连续请求将随机导致空响应(Google表示每次使用限制为50个请求那天,但像往常一样,他们没有透露明确限制请求突发的实际使用限制的细节.
因此,所有这些似乎表明,在将输入录制到Android中的音频文件的同时获取语音转录是不可能的.
但是,谷歌Keep Android应用就是这么做的.它允许你说话,将你所说的内容翻译成文本,并保存文本和录音(很不清楚它存储在哪里,但你可以重放它).它没有长度限制.
所以问题是:是否有人知道Google如何做到这一点?我会查看源代码,但它似乎不可用,是吗?
我在进行语音识别时嗅探了Google Keep发送和接收的数据包,它肯定不会使用上面提到的语音api.所有流量都是TLS,并且(从外部看)它看起来与使用SpeechRecognizer时非常相似.
那么也许存在将麦克风输入流"分割"(即复制或复用)到两个流中的方式,并将其中一个馈送到SpeechRecognizer,另一个馈送到MediaRecorder?
Google Keep会RecognizerIntent使用某些未记录的附加内容启动,并期望生成的意图包含录制音频的URI.如果RecognizerIntent由Google语音搜索提供服务,则一切正常,Keep会获得音频.
有关更多信息,请参阅从语音识别意图中录制/保存音频,以及以与Keep(可能)相同的方式调用识别器的代码示例.
请注意,此行为不是Android的一部分.这只是两个闭源Google应用程序如何相互通信的当前未记录方式.
| 归档时间: |
|
| 查看次数: |
3300 次 |
| 最近记录: |