请选择 进入手机版 | 继续访问电脑版

[Android] Android中使用 TextToSpeech的方法

  [复制链接]
查看317 | 回复70 | 2021-9-14 07:09:50 | 显示全部楼层 |阅读模式

前言

在一年前,和朋侪 一最少 了一个英语APP,仿照某APP实现了单词的功能,最开始就是借助的TextToSpeech,后面感觉声音不够好听,于是利用 了第三方

APP初稿如图:

请添加图片形貌

实现

1.初始化语音。这是一个异步操作。初始化完成后调用oninitListener(第二个参数)。

  1. TextToSpeech mTts = new TextToSpeech(this, this);
复制代码

2.实现TextToSpeech.OnInitListener

注意 :语言大概 不可用。

  1. // 实现TextToSpeech.OnInitListener.
  2. public void onInit(int status) {
  3. if (status == TextToSpeech.SUCCESS) {
  4. //设置首选语言为中文,注意,语言可能是不可用的,结果将指示此
  5. int result = mTts.setLanguage(Locale.CHINA);
  6. if (result == TextToSpeech.LANG_MISSING_DATA ||
  7. result == TextToSpeech.LANG_NOT_SUPPORTED) {
  8. //语言数据丢失或不支持该语言。
  9. Log.e(TAG, "语言数据丢失或不支持该语言");
  10. } else {
  11. //检查文档中其他可能的结果代码。
  12. // 例如,语言可能对区域设置可用,但对指定的国家和变体不可用
  13. // TTS引擎已成功初始化。
  14. // 允许用户按下按钮让应用程序再次发言。
  15. mAgainButton.setEnabled(true);
  16. }
  17. } else {
  18. // 初始化失败
  19. Log.e(TAG, "初始化失败");
  20. }
  21. }
复制代码

3.写一个朗读方法,在必要 的时间 触发(如:点击变乱 )

TextToSpeech的speak方法有两个重载。

实验 朗读的方法

  1. speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
复制代码

第二个参数queueMode用于指定发音队列模式,两种模式选择。
(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务 时间 会扫除 当前语音任务 ,实验 新的语音任务
(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务 放到语音任务 之后,等前面的语音任务 实验 完了才会实验 新的语音任务 。

将朗读的的声音记录成音频文件

  1. synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
复制代码
  1. private void sayHello() {
  2. String hello ="Hellow";
  3. //TextToSpeech的speak方法有两个重载。
  4. // 执行朗读的方法
  5. //speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
  6. // 将朗读的的声音记录成音频文件
  7. //synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
  8. //第二个参数queueMode用于指定发音队列模式,两种模式选择
  9. //(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
  10. //(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,
  11. //等前面的语音任务执行完了才会执行新的语音任务
  12. mTts.speak(hello,
  13. TextToSpeech.QUEUE_FLUSH,
  14. null);
  15. }
复制代码

4.记得利用 Activity的生命周期中将其关闭

  1. @Override
  2. public void onDestroy() {
  3. // 生命周期中结束
  4. if (mTts != null) {
  5. mTts.stop();
  6. mTts.shutdown();
  7. }
  8. super.onDestroy();
  9. }
复制代码

源码

SpeechActivity.java

  1. public class SpeechActivity extends Activity implements TextToSpeech.OnInitListener {
  2. private static final String TAG = "SpeechDemo";
  3. private TextToSpeech mTts;
  4. private Button mButton;
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.text_to_speech);
  9. //初始化语音。这是一个异步操作。初始化完成后调用oninitListener(第二个参数)。
  10. mTts = new TextToSpeech(this, this);
  11. mButton = (Button) findViewById(R.id.again_button);
  12. //触发
  13. mButton.setOnClickListener(new View.OnClickListener() {
  14. public void onClick(View v) {
  15. sayHello();
  16. }
  17. });
  18. }
  19. @Override
  20. public void onDestroy() {
  21. // 生命周期中结束
  22. if (mTts != null) {
  23. mTts.stop();
  24. mTts.shutdown();
  25. }
  26. super.onDestroy();
  27. }
  28. // 实现TextToSpeech.OnInitListener.
  29. public void onInit(int status) {
  30. if (status == TextToSpeech.SUCCESS) {
  31. //设置首选语言为中文,注意,语言可能是不可用的,结果将指示此
  32. int result = mTts.setLanguage(Locale.CHINA);
  33. if (result == TextToSpeech.LANG_MISSING_DATA ||
  34. result == TextToSpeech.LANG_NOT_SUPPORTED) {
  35. //语言数据丢失或不支持该语言。
  36. Log.e(TAG, "语言数据丢失或不支持该语言");
  37. } else {
  38. //检查文档中其他可能的结果代码。
  39. // 例如,语言可能对区域设置可用,但对指定的国家和变体不可用
  40. // TTS引擎已成功初始化。
  41. // 允许用户按下按钮让应用程序再次发言。
  42. mAgainButton.setEnabled(true);
  43. }
  44. } else {
  45. // 初始化失败
  46. Log.e(TAG, "初始化失败");
  47. }
  48. }
  49. private void sayHello() {
  50. String hello ="计蒙不吃鱼";
  51. //TextToSpeech的speak方法有两个重载。
  52. // 执行朗读的方法
  53. //speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
  54. // 将朗读的的声音记录成音频文件
  55. //synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
  56. //第二个参数queueMode用于指定发音队列模式,两种模式选择
  57. //(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
  58. //(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,
  59. //等前面的语音任务执行完了才会执行新的语音任务
  60. mTts.speak(hello,
  61. TextToSpeech.QUEUE_FLUSH,
  62. null);
  63. }
  64. }
复制代码

text_to_speech.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:orientation="vertical"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. >
  6. <Button android:id="@+id/again_button"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:enabled="false" />
  10. </LinearLayout>
复制代码

到此这篇关于Android中TextToSpeech的利用 的文章就先容 到这了,更多相干 adroid TextToSpeech利用 内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar Sstz0719 | 2021-9-14 09:11:32 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

avatar 啊歪歪哈坠 | 2021-9-14 13:31:20 | 显示全部楼层
今天上网不回帖,回帖就回精华帖!
回复

使用道具 举报

avatar NYB冬冬 | 2021-9-19 22:31:37 | 显示全部楼层
有节操!
回复

使用道具 举报

avatar 温润而哲 | 2021-9-21 05:54:37 | 显示全部楼层
最近压力山大啊!
回复

使用道具 举报

avatar 浪子孤女 | 2021-9-22 02:06:10 | 显示全部楼层
信admin楼主,得永生!
回复

使用道具 举报

avatar 风云18171265739 | 2021-9-22 12:46:29 | 显示全部楼层
禽兽不如应该不是说admin楼主的的吧?
回复

使用道具 举报

avatar 豪哥692 | 2021-9-26 23:28:55 | 显示全部楼层
admin楼主看起来很有学问!
回复

使用道具 举报

admin楼主病的不轻啊!
回复

使用道具 举报

avatar 嗅觉Y不缺失 | 2021-10-1 22:13:07 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则