Como o Google Keep faz o reconhecimento de fala ao salvar a gravação de áudio ao mesmo tempo?

O SpeechRecognizer do Android aparentemente não permite gravar a entrada na qual você está fazendo o reconhecimento de fala em um arquivo de áudio. Ou seja, você grava a voz usando um MediaRecorder (ou AudioRecord) ou realiza o Reconhecimento de Fala com um SpeechRecognizer; nesse caso, o áudio não é gravado em um arquivo (pelo menos, não é possível acessar); mas você não pode fazer as duas coisas ao mesmo tempo.

A questão de como obter a gravação de áudio e o reconhecimento de fala ao mesmo tempo no Android já foi feita várias vezes, e a "solução" mais popular é gravar um arquivo flac e usar a API de fala não oficial do Google, que permite enviar um flac através de uma solicitação POST e obtenha uma resposta json com a transcrição.http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/ (versão Android desatualizada)https://github.com/katchsvartanian/voiceRecognition/tree/master/VoiceRecognition http://mikepultz.com/2013/07/google-speech-api-full-duplex-php-version/

Isso funciona muito bem, mas possui uma enorme limitação, que não pode ser usada com arquivos com mais de 10 a 15 segundos (o limite exato não é claro e pode depender do tamanho do arquivo ou talvez da quantidade de palavras). Isso o torna inadequado para minhas necessidades.

Além disso, dividir o arquivo de áudio em arquivos menores NÃO é uma solução possível; mesmo esquecendo as dificuldades em dividir corretamente o arquivo nas posições corretas (não no meio de uma palavra), muitas solicitações consecutivas à API do serviço Web acima mencionada resultarão aleatoriamente em respostas vazias (o Google diz que há um limite de uso de 50 solicitações por dia, mas como de costume eles não divulgam os detalhes doreal limites de uso que claramente restringem as explosões de solicitações).

Portanto, tudo isso parece indicar que é impossível obter uma transcrição da fala e ao mesmo tempo gravar a entrada em um arquivo de áudio no Android.

NO ENTANTO, o aplicativo Google Keep Android faz exatamente isso. Ele permite que você fale, transcreva o que você disse em texto e salve o texto e a gravação de áudio (bem, não está claro onde ele o armazena, mas você pode reproduzi-lo). E não tem limitação de comprimento.

Portanto, a pergunta é: ALGUÉM TEM UMA IDEIA DE COMO O GOOGLE MANTÊ-LO? Gostaria de olhar o código fonte, mas ele não parece estar disponível, não é?

Cheirei os pacotes que o Google Keep envia e recebe durante o reconhecimento de fala, e definitivamente NÃO usa a API de fala mencionada acima. Todo o tráfego é TLS e (do lado de fora) parece praticamente o mesmo de quando você está usando o SpeechRecognizer.

Talvez exista uma maneira de "dividir" (ou seja, duplicar ou multiplexar) o fluxo de entrada do microfone em dois fluxos e alimentar um deles para um SpeechRecognizer e o outro para um MediaRecorder?

questionAnswers(2)

yourAnswerToTheQuestion