Per provare questo sistema e' stata creata, sulla base una semplice applicazione basata sull'esempio a questo link
1) Non tutti i telefoni sono abilitati al SpeechToText (per esempio il Samsung Next Turbo GT-5570i non ha questa funzione mentre il Nexus S si'...francamente non riesco a capire il motivo della differenza)
2) La funzione Speech To Text ricalca il modo di lavorare di Siri per Apple. L'elaborazione non avviene in locale ma il file audio viene mandato ai server di Google che lo elaborano e rimandano indietro la stringa del risultato
di seguito il codice
MainActivity.java
---------------------------------------------------------
package com.luca.innocenti.texttospeech;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.speech.RecognizerIntent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
protected static final int RESULT_SPEECH = 1;
private TextView testo;
private Button pulsante;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testo = (TextView) findViewById(R.id.textView1);
pulsante = (Button) findViewById(R.id.button1);
pulsante.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "it-IT");
try {
startActivityForResult(intent, RESULT_SPEECH);
testo.setText("-------");
} catch (ActivityNotFoundException a) {
Toast t = Toast.makeText(getApplicationContext(),"Speech to Text non disponibile su questo telefono",
Toast.LENGTH_SHORT);
t.show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_SPEECH: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> text = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
testo.setText(text.get(0));
}
break;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
---------------------------------------------------------
activity_main.xml
---------------------------------------------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="28dp"
android:text="Push to Talk" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginTop="80dp"
android:text="--------" />
</RelativeLayout>
---------------------------------------------------------