Cerca con Google

Translate

14 luglio 2011

Tutorial 18 - I componenti SpeechRecognizer e TextToSpeech


Una delle cose che più colpisce chi si avvicina per la prima volta ad App Inventor è la facilità con cui mette a disposizione strumenti molto potenti (GPS, accelerometro, etc...) richiedendo pochissimo sforzo allo sviluppatore.

Due di questi elementi li vedremo nel tutorial di oggi; come spesso accade in App Inventor, questi due blocchi sono in realtà più che altro degli activity starter (utilizzano le "activity" di Android) e possono tornare molto utili in applicazioni che richiedano un interazione facilitata tra noi e lo smartphone.




SpeechRecognizer ci permette di inserire del testo nella nostra applicazione utilizzando la nostra voce al posto della tastiera (spesso scomoda o pericolosa da usare ad esempio se stiamo guidando)
Chi di voi non ha mai utilizzato la fenomenale ricerca vocale di Google...?
beh, con pochi semplici blocchi funzionali potremmo usare gli stessi algoritmi anche nelle nostre app!!!

Mentre TextToSpeech (conosciuto anche come TTS) fa esattamente l'opposto, ovvero pronuncerà con voce naturale (Google deve a mio avviso migliorare questo aspetto, la voce attuale è ancora troppo robotica) una stringa di testo che gli daremo in pasto.

Per il tutorial di oggi è richiesto che abbiate completato il progetto del tutorial 17, se non avete tempo o voglia di farlo, potete scaricare il sorgente del Tutorial 17 direttamente da qui

Buona visione!


Qui trovate il codice sorgente della applicazione appena realizzata. Anche se i due blocchi appena visti sono piuttosto semplici, vi riporto il testo dell'help (direttamente dalle pagine di AI sezione Learn) tradotte in italiano:

SpeechRecognizer




Usa il componente speech recognizer per ascoltare quello che dice l'utente e convertire il suono pronunciato in testo usando le feature di riconoscimento vocale di Android.

Properties 

Result
Il testo così come riconosciuto da android.

Methods

GetText()
Chiede all'utente di parlare, e converte il parlato in testo. Il segnale AfterGettingText viene generato quando il risultato è stato elaborato.

Events

AfterGetting(Text result)
Evento generato dopo che speechrecognizer ha prodotto il testo. L'argomento è il testo convertito prodotto.
BeforeGettingText()
Evento generato subito prima che il blocco venga chiamato dall'applicazione.

TextToSpeech

Picture of Text to Speech component
Usa il componente TTS per pronunciare un testo in modo audibile.
Perchè questo componente funzioni, il device deve avere TTS Extended Service app by Eyes-Free Project installato (lo trovate nel market e nel video vi mostro dove)
Il componente TTS ha delle proprietà che potete impostare per modificare la lingua e il paese da utilizzare nella sintesi vocale.
Queste proprietà usano dei codici di tre lettere, per esempio si può definire Inglese britannico o inglese americano.
Per inglese britannico "language code" è eng e "contry code" è GBR.
Mentre per l'americano il "language code" è eng e "contry code" è USA.
La lista completa la trovate qui:
Properties
Country
Il codice paese da utilizzare.
Language
Il codice lingua da utilizzzare.

Methods

Speak(Text message)
Pronuncia il testo che viene passato all'elemento.

Events

AfterSpeaking(Text result)
Evento generato dopo che il testo è stato pronunciato, l'argomento è il testo stesso.
BeforeSpeaking()
Evento generato subito prima che il testo venga pronunciato.

19 commenti:

  1. Ciao Sebastiano volevo sapere se c'è un'oggetto di AI che abbia la funzione di riconoscimento vocale o meglio che facci un controllo su 2 audio se simili o meno...grazie.

    RispondiElimina
  2. No gli unici due componenti che esistono solo quelli che ho pubblicato

    RispondiElimina
  3. ciao Sebastiano, complimenti per i tuoi tutorial.... in questo però ho un problema: l'ig di google ha un xml diverso, quindi quando vado a lanciare l'app naturalmente si blocca restituendomi un errore. come posso modificare il filtraggio delle stringhe?

    grazie.

    RispondiElimina
    Risposte
    1. Ciao Antonio,scusami ma non capisco la tua domanda,
      scrivi sul forum per ulteriore aiuto e se vuoi allega anche il tuo file .zip col sorgente
      ciao

      Elimina
    2. Ciao Sebastiano, scusami se non ho risposto sul forum ma ho qualche problema con la registrazione (dopo aver compilato la prima schermata con i dati della mail, nick e pass, la registrazione non va avanti....)..... in poche parole ho seguito alla lettera il tutorial su come prendere alcune stringhe della pagina API di google weather(http://www.google.com/ig/api....ect), ma essendo un tutorial di 1 anno fa, quella pagina ora è diversa, pertanto l'app mi restituisce un errore. Inoltre ho anche un problema con i tasti del DELETE dell'app inventor, nel senso che non mi funzionano (infatti non mi escono neanche i messaggi di conferma cancellazione). Scusami se ti ho mosto molti quesiti su questo post, ma, non funzionando il forum, non so dove scrivere o comunicare...

      Grazie e buona giornata

      Elimina
    3. Ciao Antonio,forse ora ho capito,
      ho riscaricato il mio tutorial e funziona ancora, solo che è molto importante usare www.google.com (http://www.google.com/ig/api?weather=Milano) perchè se si utilizza la versione italiana della pagina http://www.google.it/ig/api?weather=Milano l'xml che ci ritorna ha i caratteri accentati che non sono ancora supportati in app inventor.
      Ti consiglio di controllare con le finestre di watch nel blocks editor cosa ti ritorna l'app in "responsecode" se hai dei caratteri strani tipo un triangolo con un punto di domanda è perchè non riesce a leggere gli accenti, tipo "umidità" invece che "humidity" per il momento c'è poco da fare, finchè google non supporterà gli unicode avremo dei problemi.
      Se vedi il problema nel mio esempio è proprio umidità, se togli quel pezzo l'app dovrebbe funzionare sia che leggi da .it o da .com
      Per il forum se vuoi riprova,a volta ci son problemi con la registrazione...

      Elimina
    4. Ciao Sebastiano, ho risolto tutti i problemi:
      1) Il programma del meteo il problema era sulla trascrizione di weather e condition, di conseguenza il programma è partito
      2)i problemi della pagina xml di google weather, il tasto DELETE dell'AI e la registrazione sul forum li ho risolti passando da google chrome a firefox.

      Grazie per l'aiuto e continua con i tutorial, se per caso ho qualche altra domanda adesso userò il forum XD

      Ciao

      Elimina
    5. Ciao Sebastiano, ho risolto tutti i problemi:
      1) Il programma del meteo il problema era sulla trascrizione di weather e condition, di conseguenza il programma è partito
      2)i problemi della pagina xml di google weather, il tasto DELETE dell'AI e la registrazione sul forum li ho risolti passando da google chrome a firefox.

      Grazie per l'aiuto e continua con i tutorial, se per caso ho qualche altra domanda adesso userò il forum XD

      Ciao

      Elimina
  4. scusa ma io volevo sapere come fare a far smettere di parlare il texttospeech

    RispondiElimina
    Risposte
    1. cosa intendi? che se sta pronunciando un testo troppo lungo lo vuoi interrompere? non mi risulta sia possibile farlo, una volta che richiami il metodo "speak" tutto il testo che gli passi viene pronunciato ad alta voce, se non ho capito cerca di spiegarmi meglio il tuo problema, ciao

      Elimina
  5. si hai capito bene, peccato perchè mi sarebbe piaciuto perchè esattamente come hai detto te dovevo fermare un testo troppo lungo

    RispondiElimina
    Risposte
    1. E' un pò macchinoso ma potresti spezzare il testo da pronunciare in varie frasi da mettere in una lista, poi crei una procedura che le pronuncia una dopo l'altra a meno che l'utente non prema un altro button nel qual caso "blocchi" il prossimo text-to-speech di fatto "simulando" l'interruzione prematura del metodo "speak",
      più complesso da realizzare, ma potrebbe essere una soluzione fattibile...:)

      Elimina
  6. Puoi inserire un tasto "STOP" e chiamare la routine texttospeech del componente TTS inserendo un testo vuoto. Provato, funziona. Non interrompe all'istante ma quasi.

    RispondiElimina
    Risposte
    1. Grazie! ottima soluzione a cui non avevo pensato!
      semplice ma efficace!!! grazie ancora :)

      Elimina
  7. Ho fatt oavviare uno speechrecognizer con un timer, ma è possibile fargli ottenere dell'audio se l'apparecchio è in blocca schermo/standby?

    RispondiElimina
    Risposte
    1. onestamente non ho mai provato ma in genere le app fatte con AI vengono "congelate" col telefono in standby

      Elimina
  8. Ciao è possibile con ai2 filtrare la voce,ovvero tu parli con la tua voce e ne esce ad esempio una ameccanica?

    RispondiElimina
  9. ciao come posso modificare il tempo di registrazione ?grazie in anticipo

    RispondiElimina
  10. Questo commento è stato eliminato dall'autore.

    RispondiElimina