Der SpeechRecognizer von Android erlaubt anscheinend nicht, die Eingabe, mit der Sie die Spracherkennung durchführen, in einer Audiodatei aufzuzeichnen. Das heißt, Sie nehmen entweder mit einem MediaRecorder (oder AudioRecord) Sprachaufnahmen auf oder Sie verwenden Spracherkennung mit einem SpeechRecognizer. In diesem Fall wird das Audio nicht in einer Datei aufgezeichnet (zumindest nicht auf eine, auf die Sie zugreifen können). aber du kannst beides nicht gleichzeitig machen.
Die Frage, wie Audioaufzeichnung und Spracherkennung gleichzeitig in Android durchgeführt werden können, wurde schon mehrfach gestellt. Die beliebteste Lösung besteht darin, eine Flac-Datei aufzuzeichnen und die inoffizielle Speech-API von Google zu verwenden sende eine flac-Datei über eine POST-Anfrage und erhalte eine json-Antwort mit der Transkription. Ссылка (veraltete Android-Version) Ссылка Ссылка
Das funktioniert ziemlich gut, hat aber eine große Einschränkung. Es kann nicht mit Dateien länger als etwa 10-15 Sekunden verwendet werden (das genaue Limit ist nicht klar und kann von der Dateigröße oder der Anzahl der Wörter abhängen). Dies macht es nicht für meine Bedürfnisse geeignet.
Auch das Schneiden der Audiodatei in kleinere Dateien ist KEINE mögliche Lösung; Selbst wenn man die Schwierigkeiten bei der korrekten Aufteilung der Datei an den richtigen Stellen (nicht in der Mitte eines Wortes) vergisst, führen viele aufeinanderfolgende Anfragen an die oben genannte Web-Service-API zufällig zu leeren Antworten (Google sagt, es gibt ein Nutzungslimit von 50 Anfragen pro Tag, aber wie üblich sie offenbaren nicht die Details der real Nutzungsgrenzen, die Ausbrüche von Anfragen eindeutig beschränken.
All dies scheint darauf hinzudeuten, dass es unmöglich ist, eine Transkription von Sprache zu erhalten, während gleichzeitig die Eingabe in eine Audiodatei in Android aufgezeichnet wird.
JEDOCH macht die Google Keep Android App genau das. Es ermöglicht Ihnen zu sprechen, transkrbes, was Sie gesagt haben, in Text und speichert sowohl den Text als auch die Audioaufnahme (es ist nicht klar, wo es gespeichert ist, aber Sie können es wieder abspielen). Und es hat keine Längenbeschränkung.
Die Frage ist also: HAT JEMAND EINE IDEE, WIE GOOGLE ES HÄLT? Ich würde mir den Quellcode ansehen, aber es scheint nicht verfügbar zu sein, oder?
Ich habe an den Paketen gecheckt, die Google Keep während der Spracherkennung sendet und empfängt, und verwendet definitiv nicht die oben erwähnte Sprach-API. Der gesamte Verkehr ist TLS und (von außen) sieht es fast genauso aus wie bei der Verwendung von SpeechRecognizer.
Gibt es vielleicht einen Weg, den Mikrofoneingangsstrom in zwei Ströme zu "teilen" (d. h. zu duplizieren oder zu multiplexen) und einen von ihnen einem SpeechRecognizer und den anderen einem MediaRecorder zuzuführen?
Google Keep startet RecognizerIntent
mit bestimmten nicht dokumentierten Extras und erwartet, dass die resultierende Absicht den URI des aufgezeichneten Audios enthält. Wenn RecognizerIntent
von Google Voice Search bedient wird, funktioniert alles und Keep erhält das Audio.
Siehe Audio von der Stimmerkennungsabsicht aufnehmen / speichern für Weitere Informationen und ein Codebeispiel, das den Erkenner auf dieselbe Weise aufruft wie Keep (wahrscheinlich).
Beachten Sie, dass dieses Verhalten nicht Teil von Android ist. Es ist einfach die aktuelle undokumentierte Art, wie zwei Google Apps mit geschlossenen Quellen miteinander kommunizieren.
Es verwendet onPartialResults (Bundle) Dieses Ereignis gibt Text zurück, der während der Aufzeichnung von aufgezeichneter Sprache erkannt wurde Es ist auch verfügbar auf Xamarin
Tags und Links android google-api speech-recognition audio-recording