Saturday, December 17, 2011

Text To Speech (TTS) in Android


Avete mai pensato di implementare la sintesi vocale in una vostro progetto Android?
Se non sapete come fare, vi posso assicurare che è più semplice di quanto pensate.
Senza perderci in chiacchere, implementiamo nella nostra classe l'interfaccia OnInitListener la quale sarà richiesta dalla classe TextToSpeech. Ora possiamo dichiararci il nostro oggetto:

 import android.speech.tts.TextToSpeech;  
 import android.speech.tts.TextToSpeech.OnInitListener  

 private TextToSpeech tts = null;  

Le API TTS supportano diverse lingue come Inglese, Francese, Tedesco, Italiano e Spagnolo ma è necessario ogni volta specificare la lingua di output. Se diciamo all'istanza TTS configurata in italiano di pronunciare la parola "I am 21" aspettiamoci un "I am ventuno" e non un "Ai em tuenti uan". E' molto importante quindi la configurazione dell'oggetto.
Ulteriore controllo da fare, è anche la presenza delle librerie nel device. Alcuni dispositivi non le possiedono per motivi di spazio oppure possono non avere giusto la lingua che serve a noi.
Per ovviare a ciò potremmo ipotizzare di lanciare un Intent di controllo per esempio nell OnCreate.

  Intent checkIntent = new Intent();   
  checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);   
  startActivityForResult(checkIntent, CODICE_CONTROLLO);   

Sarà allora nostro compito gestire l'onActivityResult

  protected void onActivityResult(int requestCode, int resultCode, Intent data)    
  {    
   if (requestCode == CODICE_CONTROLLO)    
   {    
   if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)    
   {    
    //tutto apposto creiamo l'istanza TTS    
    mTts = new TextToSpeech(this, this);    
    //Controllo se la lingua italiana è disponibile   
    if(mTts.isLanguageAvailable(Locale.ITALIAN)== TextToSpeech.LANG_AVAILABLE)    
    {    
     mTts.setLanguage(Locale.ITALIAN);         
    }    
    else    
    {   
     //Altrimenti metto quella inglese o lancio l'install   
     mTts.setLanguage(Locale.ENGLISH);    
    }    
   }    
   else    
   {    
   // dati mancanti, provo ad installarlo    
   Intent installIntent = new Intent();    
   installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);    
   startActivity(installIntent);    
   }    
   }    
  }    

TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA è l'action necessaria a far aprire il market e a proporre il download delle librerie TTS.

A questo punto abbiamo l'oggetto pronto, non ci resta che farlo parlare ;)

Il modo più semplice è col metodo speak, vediamo come si usa:

  String sParla= "Prova, ciao ciao ciao";   
  //In questo modo aggiunge la riproduzione del testo in coda   
  mTts.speak(sParla, TextToSpeech.QUEUE_ADD, null);   
  //In quest altro modo interrompe la coda e riproduce il testo   
  mTts.speak(sParla, TextToSpeech.QUEUE_FLUSH, null);   


Per ulteriori approfondimenti , la risorsa "ufficiale" riguardo al TTS in Android è raggiungibile qui.

No comments:

Post a Comment