Android 自动朗读(TTS)

旧时模样 提交于 2020-01-11 00:57:00

  在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 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!