首页 文章

Google Keep如何在保存录音的同时进行语音识别?

提问于
浏览
9

Android的SpeechRecognizer显然不允许将您正在进行语音识别的输入记录到音频文件中 . 也就是说,要么使用MediaRecorder(或AudioRecord)录制语音,要么使用SpeechRecognizer进行语音识别,在这种情况下,音频不会记录到文件中(至少不能访问);但你不能同时做到这两件事 .

多次询问如何在Android中同时录制音频和进行语音识别的问题,最受欢迎的"solution"是录制一个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秒的文件(确切的限制不明确,可能取决于文件大小或可能的单词数量) . 这使它不适合我的需要 .

此外,将音频文件切片为较小的文件不是一种可能的解决方案;甚至忘记了在正确的位置(而不是在一个单词的中间)正确分割文件的困难,对上述网络服务api的许多连续请求将随机导致空的响应(谷歌说's a usage limit of 50 requests per day, but as usual they don'吨透露了详细信息 . 实际使用限制,明确限制请求的爆发) .

因此,所有这些似乎表明,在将输入录制到Android中的音频文件的同时获取语音转录是不可能的 .

但是,谷歌Keep Android应用就是这么做的 . 它允许你说话,将你所说的内容翻译成文本,并保存文本和录音(很不清楚它存储在哪里,但你可以重放它) . 它没有长度限制 .

所以问题是:是否有人知道Google如何做到这一点?我会查看源代码,但它似乎不可用,是吗?

我在聆听Google Keep发送和接收的数据包时进行语音识别,并且绝对不会使用上面提到的语音api . 所有流量都是TLS,并且(从外部看)它看起来与使用SpeechRecognizer时非常相似 .

那么也许存在一种将麦克风输入流“分割”(即复制或复用)成两个流的方式,并将其中一个馈送到SpeechRecognizer,另一个馈送到MediaRecorder?

2 回答

  • 5

    Google Keep会使用某些未记录的附加内容启动 RecognizerIntent ,并期望生成的意图包含录制音频的URI . 如果 RecognizerIntent 由Google语音搜索提供服务,则一切正常,Keep会获得音频 .

    有关更多信息,请参阅record/save audio from voice recognition intent以及以与Keep(可能)相同的方式调用识别器的代码示例 .

    请注意,此行为不是Android的一部分 . 这只是两个闭源Google应用程序如何相互通信的当前未记录方式 .

  • -1

    它使用onPartialResults(Bundle)此事件返回从录制的语音中识别的文本,而它也可以在Xamarin上使用's still recording It'

相关问题