Autore Topic: Implementare TTS e ASR in classi singole  (Letto 844 volte)

Offline Qwertid

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
Implementare TTS e ASR in classi singole
« il: 05 Settembre 2011, 11:42:55 CEST »
0
Ciao a tutti!
Ho necessità di scrivere un'applicazione che faccia largo uso di ASR e TTS (per il momento utilizzo quelli di google). Allo stato attuale delle cose sono in grado di far "parlare" la mia applicazione ma il modo in cui lo faccio non mi soddisfa.. Provo ad uppare un pò di codice

Codice (Java): [Seleziona]
public class MainMenuActivity extends Activity implements OnInitListener{
       
        private int MY_DATA_CHECK_CODE = 0;
       
        private TextToSpeech tts;
       
        Intent intento;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.main);    
       
        final Intent opzioniIntent = new Intent(this, OpzioniActivity.class);
       
        LinearLayout linear = (LinearLayout) findViewById(R.id.llRootMain);
        linear.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                tts.stop();
                                tts.shutdown();
                                startActivity(opzioniIntent);
                        }
                });  
               
        Intent checkIntent = new Intent();
                checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
                startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
    }
 

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == MY_DATA_CHECK_CODE) {
                        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                                // success, create the TTS instance
                                tts = new TextToSpeech(this, this);
                        }
                        else {
                                // missing data, install it
                                Intent installIntent = new Intent();
                                installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                                startActivity(installIntent);
                        }
                }

        }
       

        @Override
        public void onInit(int status) {       
                Resources res = getResources();
                String benvenuto = res.getString(R.string.benvenuto);
                tts.speak(benvenuto, TextToSpeech.QUEUE_ADD, null);
        }      

Questo è quello che grossomodo faccio: ho letto su libri e tutorial quello che ho applicato qui anche se il significato del rapporto che intercorre tra startActivityForResult e onActivityResult non mi è molto chiaro. Più che altro vorrei poter trasformare tutto questo in una classe singola da poter instanziare quando ho necessità di un sintetizzatore vocale senza la necessità di dover inserire ogni volta tutto questo codice nelle varie activity. Potete spiegarmi come si fa?

Per quanto riguarda ASR invece sono molto all'asciutto: qualche buona fonte?

Grazie mille per l'aiuto  :-)

Offline Qwertid

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
Re:Implementare TTS e ASR in classi singole
« Risposta #1 il: 06 Settembre 2011, 10:00:47 CEST »
0
Up odierno  :-)

Offline Qwertid

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
Più activity e stesso TTS
« Risposta #2 il: 07 Settembre 2011, 11:16:38 CEST »
0
Ciao a tutti!  :-)
Per un'applicazione ho la necessità che tutte le activity che la compongono utilizzino il TTS: da quanto mi pare di aver capito il TTS accetta nel suo costruttore il contesto, quindi non posso "riutilizzare" sempre al stessa istanza di TTS ma devo generarne una nuova ad ogni activity per forza? E passargli poi "this" come contesto?

Ci sono maniere più efficaci?

Grazie a tutti  :-)