Die Spracherkennung funktioniert nicht, wenn die Stimme gerade aufgenommen wird

8

Ich arbeite an einer Funktion, die beim Drücken einer Taste die Spracherkennung startet und gleichzeitig aufzeichnet, was der Benutzer sagt. Codes wie folgt:

%Vor%

Fragen:

Ich habe die App Schritt für Schritt gemacht, und zuerst hat die App keine Aufnahmefunktionen und die Spracherkennung funktioniert einwandfrei.

Nachdem ich viele Male getestet habe und dachte, dass die Spracherkennung in Ordnung ist, fange ich an, die Aufnahmefunktionen mit dem MediaRecorder zu integrieren.

Ich habe dann getestet, sobald der button_start gedrückt wird, erscheint sofort ERROR3 AUDIO message, noch bevor ich versucht habe zu sprechen.

Ich spiele die Sprachaufnahme ab. Die Stimme wird ebenfalls aufgezeichnet und gespeichert.

Was passiert? Warum kann nicht gleichzeitig mit der Spracherkennung aufgenommen werden?

Danke!

    
pearmak 09.10.2013, 14:28
quelle

1 Antwort

5

- EDIT-- Modul für Opus-Record WHILE Spracherkennung läuft auch

- EDIT-- 'V1BETA1' Streaming, kontinuierliche, Erkennung mit geringfügigen Änderung zu beispielprojekt . Ändern Sie das ' readData () ', damit das rohe PCM in 'sData' von zwei Threads gemeinsam genutzt wird (filesink-Thread, recognizerAPI-Thread aus Beispielprojekt). Für die Senke, schließen Sie einfach einen Encoder an, indem Sie einen PCM-Stream verwenden, der bei jedem 'Data' IO aktualisiert wird. Denken Sie daran, den Stream zu CLOEN und es wird funktionieren. review ' writeAudiaDataToFile () ' für mehr über fileSink ....

- EDIT-- siehe dieser Thread

Es wird einen grundlegenden Konflikt über die HAL und den Mikrofonpuffer geben, wenn Sie versuchen:

%Vor%

und

%Vor%

Sie können nur die eine oder die andere der oben genannten Aktionen auswählen, um die dem Mikrofon zugrunde liegenden Audio-APIs zu besitzen!

Wenn Sie die Funktionen von Google Keep nachahmen möchten, bei denen Sie nur einmal sprechen und die Ausgabe aus dem einen Eingabeprozess (Ihre Rede in das Mikrofon) erfolgt, erhalten Sie zwei verschiedene Ausgabetypen (STT und einen DateiSpink von zB MP3) strong> Dann musst du etwas teilen, wenn es die HAL-Ebene vom Mikrofon verlässt.

Zum Beispiel:

  1. Nehmen Sie das RAW-Audio auf, wenn PCM 16 aus dem mic Puffer

  2. Teilen Sie die Bytes des obigen Puffers auf (Sie können einen Stream vom Puffer erhalten und den Stream an zwei Stellen pipen)

  3. STRM 1 an die API für STT entweder vor oder nach der Codierung (es gibt STT-APIs, die sowohl Raw PCM 16 akzeptieren als auch codieren)

  4. STRM 2 zu einem Encoder, dann zum FileSink für die Aufnahme der Aufnahme

Split kann entweder mit dem tatsächlichen Puffer arbeiten, der vom Mikrofon erzeugt wird, oder mit einem Ableitungsstrom derselben Bytes.

Was Sie erwarten, empfehle ich Ihnen, sich getCurrentRecording() und consumeRecording() hier .

STT-API-Referenz: Google "pultz rede-api" . Beachten Sie, dass es auf den dort genannten APIs Anwendungsfälle gibt.

Robert Rowntree 23.07.2014 13:12
quelle