在Android应用中,有时候需要朗读一些文本内容,今天介绍一下Android系统自带的朗读TextToSpeech(TTS)。自动朗读支持可以对指定文本内容进行朗读,还可以把文本对应的音频录制成音频文件。Android的自动朗读支持主要通过TextToSpeech来完成,该类提供了如下构造器:
1 TextToSpeech(Context context, TextToSpeech.OnInitListener listener)
当创建TextToSpeech对象时,必须先提供一个OnInitListener监听器---该监听器负责监听TextToSpeech的初始化结果。
一旦获得了TextToSpeech对象后,接下来可调用TextToSpeech的setLanguage(Locale loc)方法设置发声引擎应使用的语言、国家选项。
如果调用setLanguage(Locale loc)的返回值是"TextToSpeech.LANG_COUNTRY_AVAILABLE"说明当前TTS系统可以支持所设置的语言、国家。
TTS有两个方法来朗读:
speak(String text,int queueMode,HashMap<String,String> params)、synthesizeToFile(String text,HashMap<String,String> params,String fileName);
speak和synthesizeToFile的区别是一个后者可以把音频保存下来。
params参数:TextToSpeech.QUEUE_ADD,TextToSpeech.QUEUE_FLSH,前者调用speak方法时,会把新的发音任务添加到当前发音任务队列之后,后者直接中断当前发音任务。
下面介绍一下使用TextToSpeech的步骤:
1、创建TextToSpeech对象,创建时传入OnInitListener监听器监听创建是否成功。
2、设置TextToSpeech所使用语言、国家,通过返回值判断TTS是否支持该语言、国家。
3、调用speak或synthesizeToFile。
4、关闭TTS,回收资源。
下面上一个实例:
1 public class Speech extends Activity 2 { 3 TextToSpeech tts; 4 EditText editText; 5 Button speech; 6 Button record; 7 8 @Override 9 public void onCreate(Bundle savedInstanceState) 10 { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 // 初始化TextToSpeech对象 14 tts = new TextToSpeech(this, new OnInitListener() 15 { 16 @Override 17 public void onInit(int status) 18 { 19 // 如果装载TTS引擎成功 20 if (status == TextToSpeech.SUCCESS) 21 { 22 // 设置使用美式英语朗读 23 int result = tts.setLanguage(Locale.US); 24 // 如果不支持所设置的语言 25 if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE 26 && result != TextToSpeech.LANG_AVAILABLE) 27 { 28 Toast.makeText(Speech.this, "TTS暂时不支持这种语言的朗读。", 50000) 29 .show(); 30 } 31 } 32 } 33 34 }); 35 editText = (EditText) findViewById(R.id.txt); 36 speech = (Button) findViewById(R.id.speech); 37 record = (Button) findViewById(R.id.record); 38 speech.setOnClickListener(new OnClickListener() 39 { 40 @Override 41 public void onClick(View arg0) 42 { 43 // 执行朗读 44 tts.speak(editText.getText().toString(), 45 TextToSpeech.QUEUE_ADD, null); 46 } 47 }); 48 record.setOnClickListener(new OnClickListener() 49 { 50 @Override 51 public void onClick(View arg0) 52 { 53 // 将朗读文本的音频记录到指定文件 54 tts.synthesizeToFile(editText.getText().toString(), null, 55 "/mnt/sdcard/sound.wav"); 56 Toast.makeText(Speech.this, "声音记录成功!", 50000).show(); 57 } 58 }); 59 } 60 @Override 61 public void onDestroy() 62 { 63 // 关闭TextToSpeech对象 64 if (tts != null) 65 { 66 tts.shutdown(); 67 } 68 } 69 }