在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 }
来源:https://www.cnblogs.com/phj981805903/p/3269193.html