今天在看《疯狂android讲义》的时候,看到一篇自动朗读,原来android还有这功能,感觉还挺有意思的噢。自动朗读支持可以对指定文本内容进行朗读,从而发出声音,android的自动朗读还允许把文本对应的音频录制成音频文件,方便以后播出。
现在来看一个例子:
布局代码:
MainActivity.java:
public class MainActivity extends Activity {
private EditText etContent;
private TextToSpeech tts;
private Button btnSpeek;
private Button btnSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etContent = (EditText) findViewById(R.id.et_content);
btnSpeek = (Button) findViewById(R.id.btn_speek);
btnSave = (Button) findViewById(R.id.btn_save);
tts = new TextToSpeech(this, new OnInitListener() {
@Override
public void onInit(int status) {
// 若装载TTS引擎成功
if (status == TextToSpeech.SUCCESS) {
// 设置用美式英语朗读
int result = tts.setLanguage(Locale.US);
// 如果不支持所设置的语言
if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
&& result != TextToSpeech.LANG_AVAILABLE) {
Toast.makeText(MainActivity.this, "TTS暂时不支持这种语言的朗读", 0)
.show();
}
}
}
});
btnSpeek.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tts.speak(etContent.getText().toString(),
TextToSpeech.QUEUE_ADD, null);
}
});
btnSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tts.synthesizeToFile(etContent.getText().toString(), null,
"/mnt/sdcard/sond.wav");
Toast.makeText(MainActivity.this, "声音记录保存成功!", 0).show();
}
});
}
@Override
protected void onDestroy() {
if (tts != null) {
tts.shutdown();
}
}
}
结果:
归纳起来,使用TextToSpeed的步骤:
1. 创建
TextToSpeed对象,创建时传入OnInitListener监听器监听创建是否成功。
2. 设置
TextToSpeed所使用的语言、国家选项,通过返回值判断TTS是否支持该语言、国家选项。
3. 调用speed()或者synthesizeToFile()方法。
4. 关闭TTS,回收资源。