可以讓你實現 Text To Speech 功能,
但有一點要注意, Android 2.2 以前版本(包含 2.2), "離線版本" 只支援 English(英文) / French(法文) / German(德文) / Italian(義大利文) / Spanish(西班牙文),
其他語系若【不支援】或【沒有下載離線語音檔】, 則需要【打開行動網路】, 取得線上語音資料才可,
範例如下 :
程式碼
public class HelloWorld extends Activity
{
private EditText et;
/** TTS 物件 */
private TextToSpeech tts;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 建立 TTS
createLanguageTTS();
// 輸入文字
et = new EditText(this);
// 按鈕
Button b = new Button(this);
b.setText("Speech");
b.setOnClickListener( new OnClickListener(){
@Override
public void onClick(View arg0)
{
//【英文】發音
tts.speak( et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null );
}
});
// 版面配置
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView( et, 320, 200 );
ll.addView( b, 320, 100 );
addContentView( ll, new LinearLayout.LayoutParams(320, 480) );
}
@Override
protected void onDestroy()
{
// 釋放 TTS
if( tts != null ) tts.shutdown();
super.onDestroy();
}
private void createLanguageTTS()
{
if( tts == null )
{
tts = new TextToSpeech(this, new OnInitListener(){
@Override
public void onInit(int arg0)
{
// TTS 初始化成功
if( arg0 == TextToSpeech.SUCCESS )
{
// 指定的語系: 英文(美國)
Locale l = Locale.US; // 不要用 Locale.ENGLISH, 會預設用英文(印度)
// 目前指定的【語系+國家】TTS, 已下載離線語音檔, 可以離線發音
if( tts.isLanguageAvailable( l ) == TextToSpeech.LANG_COUNTRY_AVAILABLE )
{
tts.setLanguage( l );
}
}
}}
);
}
}
}
範例結果, 如下 :

另外, 若有發生【speak failed: TTS engine connection not fully set up】問題,
原因是【TTS Engin 建立成功, 但因 "主執行緒" 或 "執行緒池" 已滿, 導致 TTS.speak 沒有位置可以被執行】,
解決為【執行 AsyncTask 由 "execute" 改為 "executeOnExecutor"】.
以上, 參考看看囉.
