zoukankan      html  css  js  c++  java
  • Android 自动朗读(TTS)

      在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 }
  • 相关阅读:
    HTML转PDF
    观察者模式分析
    异常解决方案记录
    复杂结构数据提交
    在Spring Controller中将数据缓存到session
    Eclipse
    redis数据类型-散列类型
    redis数据类型-字符串类型
    redis键操作
    redis性能优化
  • 原文地址:https://www.cnblogs.com/phj981805903/p/3269193.html
Copyright © 2011-2022 走看看