2012-04-16 9 views
19

Quando chiamo il metodo startListening di un oggetto SpeechRecognizer, il riconoscimento vocale avvia l'ascolto vocale. Vorrei creare un servizio in attesa di parole chiave specifiche: quando l'utente dice che questa parola chiave e il riconoscimento vocale rilevano questa parola chiave, il servizio diventa pronto a ricevere comandi vocali dell'utente.Posso mantenere il riconoscimento vocale in ascolto indefinitamente?

A tal fine, dopo un nuovo SpeechRecognizer istanziato, dovrei chiamare il suo metodo startListening: posso mantenere il riconoscimento vocale in ascolto indefinitamente?

+2

sembra che tu stia facendo un'intercettazione Android - Mi piace !! – Kristian

+1

L'obiettivo è essere in grado di controllare una o più applicazioni utilizzando la voce. – enzom83

+3

Guarda l'app chiamata Vlingo. Lo fanno mantenendo l'applicazione in esecuzione in background in attesa della parola chiave "Hey Vlingo ..." Questo suona come quello che stai cercando. Vorrei provare e setacciare le molte domande qui intorno su come mantenere un servizio in esecuzione in background. Sembra un buon punto di partenza per te. – gobernador

risposta

13

Il Android Speech recognizer può essere personalizzato con l'intento di dati aggiuntivi. Vedi the android documentation.

final String public static EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS

La quantità di tempo che dovrebbe prendere dopo smettiamo di aver sentito discorso al considerare l'ingresso completo. [...]

static final String pubblico EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS Dal: API Level 8

La lunghezza minima di un enunciato. Non interromperemo la registrazione prima del questo lasso di tempo. [...]

pubblico static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

La quantità di tempo che dovrebbe prendere dopo ci fermiamo ascoltato discorso al consideriamo l'ingresso possibilmente completo. [...]

Impostare la EXTRA_LANGUAGE_MODEL per WebSearch per catturare solo parole importanti.

+0

_Dipendendo dall'implementazione del riconoscitore, questi valori potrebbero non avere alcun effetto_, quindi possiamo presumere che questi valori non possano essere modificati. In questo caso, quando il riconoscimento vocale si interrompe automaticamente perché non ha rilevato alcuna voce da parte dell'utente, dovrei riavviarlo di nuovo chiamando il metodo 'startListening': tuttavia, ciò creerebbe un intervallo di tempo durante il quale il riconoscimento vocale non è in ascolto , perché il riavvio dell'ascolto potrebbe non essere istantaneo. Come superare questo ostacolo? – enzom83

+0

È possibile implementare il proprio servizio invece di utilizzare quello di Google. Ma hai davvero provato a parametrizzare l'Intento? Penso che valga la pena provare. Non l'ho fatto da solo ma suppongo (ciecamente) che il servizio di riconoscimento vocale originale fornito da Google abbia un'implementazione che utilizza questi parametri, altrimenti non sarebbero stati aggiunti così presto (API 8). Il problema con un servizio personalizzato potrebbe essere il possibile conflitto tra il tuo e quello originale. – rockeye

+2

Ho notato che il valore predefinito di 'EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS' è di circa 10 secondi, perché se non parlo, il riconoscimento vocale interrompe automaticamente l'ascolto dopo circa 10 secondi. Così ho impostato 'EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS' a 100000 millisecondi: in questo modo il riconoscimento vocale non dovrebbe interrompere la registrazione prima di questo intervallo di tempo (100 secondi), ma si ferma sempre dopo circa 10 secondi. – enzom83

Problemi correlati