Как Google Keep выполняет распознавание речи при одновременном сохранении аудиозаписи?

SpeechRecognizer в Android, очевидно, не позволяет записывать ввод, на котором вы выполняете распознавание речи, в аудиофайл. То есть либо вы записываете голос, используя MediaRecorder (или AudioRecord в этом отношении), либо вы выполняете распознавание речи с SpeechRecognizer, и в этом случае звук не записывается в файл (по крайней мере, не тот, к которому у вас есть доступ); но вы не можете сделать оба одновременно.

Вопрос о том, как добиться записи звука и одновременного распознавания речи в Android, задавался несколько раз, и самое популярное «решение» - это запись файла flac и использование неофициального API речи от Google, который позволяет отправлять флак. файл через запрос 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 веб-службы будут случайным образом приводить к пустым ответам (Google говорит, что ограничение использования составляет 50 запросов на день, но, как обычно, они не раскрывают деталиреальный ограничения использования, которые явно ограничивают пакеты запросов).

Таким образом, все это может указывать на то, что получить транскрипцию речи при одновременной записи ввода в аудиофайл в Android НЕВОЗМОЖНО.

ОДНАКО приложение Google Keep для Android делает именно это. Он позволяет вам говорить, транскрибировать то, что вы сказали, в текст и сохраняет как текст, так и аудиозапись (ну, не ясно, где он хранится, но вы можете воспроизвести его). И это не имеет ограничения по длине.

Таким образом, вопрос заключается в следующем: есть ли у кого-либо идея, как GOOGLE KEEP это делает? Я бы посмотрел на исходный код, но он не доступен, не так ли?

Я прослушал пакеты, которые Google Keep отправляет и получает во время распознавания речи, и он определенно НЕ использует речевой API, упомянутый выше. Весь трафик - TLS, и (снаружи) он выглядит почти так же, как и при использовании SpeechRecognizer.

Таким образом, возможно, существует способ «разделить» (т.е. дублировать или мультиплексировать) входной поток микрофона на два потока и передать один из них в SpeechRecognizer, а другой - в MediaRecorder?

Ответы на вопрос(2)

Ваш ответ на вопрос