Android中TextToSpeech的使用

article/2025/10/5 2:02:54

系列文章目录

Android中TextToSpeech的使用


文章目录

  • 系列文章目录
  • 前言
  • 实现
    • 1.初始化语音。这是一个异步操作。初始化完成后调用oninitListener(第二个参数)。
    • 2.实现TextToSpeech.OnInitListener
    • 3.写一个朗读方法,在需要的时候触发(如:点击事件)
    • 4.记得利用Activity的生命周期中将其关闭
  • 源码


前言

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

APP初稿如图:

请添加图片描述


实现

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

TextToSpeech mTts = new TextToSpeech(this, this);

2.实现TextToSpeech.OnInitListener

注意:语言可能不可用。

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

3.写一个朗读方法,在需要的时候触发(如:点击事件)

TextToSpeech的speak方法有两个重载。

  • 执行朗读的方法
speak(CharSequence text,int queueMode,Bundle params,String utteranceId);

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

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

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

     @Overridepublic void onDestroy() {// 生命周期中结束if (mTts != null) {mTts.stop();mTts.shutdown();}super.onDestroy();}

源码

SpeechActivity.java

public class SpeechActivity extends Activity implements TextToSpeech.OnInitListener {private static final String TAG = "SpeechDemo";private TextToSpeech mTts;private Button mButton;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.text_to_speech);//初始化语音。这是一个异步操作。初始化完成后调用oninitListener(第二个参数)。mTts = new TextToSpeech(this, this);mButton = (Button) findViewById(R.id.again_button);//触发mButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {sayHello();}});}@Overridepublic void onDestroy() {// 生命周期中结束if (mTts != null) {mTts.stop();mTts.shutdown();}super.onDestroy();}// 实现TextToSpeech.OnInitListener.public void onInit(int status) {if (status == TextToSpeech.SUCCESS) {//设置首选语言为中文,注意,语言可能是不可用的,结果将指示此int result = mTts.setLanguage(Locale.CHINA);if (result == TextToSpeech.LANG_MISSING_DATA ||result == TextToSpeech.LANG_NOT_SUPPORTED) {//语言数据丢失或不支持该语言。Log.e(TAG, "语言数据丢失或不支持该语言");} else {//检查文档中其他可能的结果代码。// 例如,语言可能对区域设置可用,但对指定的国家和变体不可用// TTS引擎已成功初始化。// 允许用户按下按钮让应用程序再次发言。mAgainButton.setEnabled(true);}} else {// 初始化失败Log.e(TAG, "初始化失败");}}private void sayHello() {String hello ="计蒙不吃鱼";//TextToSpeech的speak方法有两个重载。// 执行朗读的方法//speak(CharSequence text,int queueMode,Bundle params,String utteranceId);// 将朗读的的声音记录成音频文件//synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);//第二个参数queueMode用于指定发音队列模式,两种模式选择//(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务//(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,//等前面的语音任务执行完了才会执行新的语音任务mTts.speak(hello,TextToSpeech.QUEUE_FLUSH,null);}}

text_to_speech.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Button android:id="@+id/again_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:enabled="false" />
</LinearLayout>

http://chatgpt.dhexx.cn/article/qRH04Q9S.shtml

相关文章

微软文本转语音小工具(Text to speech)

软件下载地址失效了&#xff0c;推荐使用网页版。 网站地址&#xff1a;Text To Speech - 在线文本转语音 话说一直在用最新的基于Chromium的微软Edge浏览器&#xff0c;绝对是我认为的最好的替代谷歌浏览器的软件了&#xff0c;拓展商店、账号书签插件同步、各种人性化功能应有…

TextToSpeech文本转语音

目录 一、TextToSpeech类中的常用方法 二、使用例子 MainActivity: activity_main: 效果图&#xff1a; 一、TextToSpeech类中的常用方法 TextToSpeech是一个Android平台提供的文本转语音功能&#xff0c;可以将文字快速地转换为语音播放。 方法名称功能setLanguage(Loc…

wereew

rtyhtyhj u y uikuiok,

werwerttwt

8987878898998 fgdfgd dfgdfgd dfgddg 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编…

wewqe

前言 又是一年一度的“剁手节”&#xff0c;在女生购物车里装满了化妆品、包包、衣服、鞋子等等东西时&#xff0c;有类人的购物车里的东西画风十分清奇&#xff0c;不落俗套。 这类人穿着统一、爱好相似、有明显的群体特征&#xff0c;这就是程序员们。 通常双十一&#xff0c…

Weave

weave网络通信模型 weave通过在docker集群的每个主机上启动虚拟的路由器&#xff0c;将主机作为路由器&#xff0c;形成互联互通的网络拓扑&#xff0c;在此基础上&#xff0c;实现容器的跨主机通信。其主机网络拓扑参见下图&#xff1a;如上图所示&#xff0c;在每一个部署Do…

Web Worker

Web Worker Web Worker?Web Worker 基本使用主线程Worker线程 Web Worker的优势在哪? Web Worker? 我们都知道JavaScript是单线程的&#xff0c;至于为什么是单线程的&#xff0c;以下内容来源阮一峰前辈的文章 作为浏览器脚本语言&#xff0c;JavaScript的主要用途是与用户…

werw er

TOCerwr wer wer wer 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能…

whisper

Robust Speech Recognition via Large-Scale Weak Supervision 介绍 大规模弱监督的训练。先前的方法都是通过大量的无监督学习训练&#xff08;无监督的数据容易收集&#xff0c;所以通过大量无监督的学习可以训练出一个质量较好的encoder&#xff09;。但是用的时候还需要找…

2015WPE封包刷Q币图文教程

首先进入魔域小组官网 www.myxzg.pw 然后观看免费的视频教程 土豆网观看地址:http://www.tudou.com/listplay/2tXberN2LlM/-6FhCm1CMv0.html

WPE详细教程一

这里讲的WPEPRO的使用方法 一、打开WPE&#xff0c;选择进程client.exe&#xff0c;切换到游戏打一段话(如9个1)&#xff0c;然后切出去按开始截取&#xff0c;切换到游戏反复粘贴刚才那复制好的9个1。 然后切出游戏按停止,就会出来一堆数字.其中找S包最简单的方法就是找位数相…

WPE详细教程

这里讲的WPEPRO的使用方法 一、打开WPE&#xff0c;选择进程client.exe&#xff0c;切换到游戏打一段话(如9个1)&#xff0c;然后切出去按开始截取&#xff0c;切换到游戏反复粘贴刚才那复制好的9个1。 然后切出游戏按停止,就会出来一堆数字.其中找S包最简单的方法就是找位数相…

Wpe工作原理和教程-以传奇为列

wpe所要改的&#xff0c;不是[游戏里面的数值]&#xff0c;而是[伪造信息封包]。 什么意思咧??就是我们用wpe所要改的&#xff0c;并不是"生命力由100变成10000"之类的东西&#xff0c; 这种东西无法用wpe改&#xff0c; 我们要改的可能是把"我卖了一个500元的…

WPE详细教程二

本教程的内容安排 本教程的安排如下:首先是讲为什么会有封包,封包的结构是怎样的。  然后介绍TCP/IP技术的相关内容,定位封包在网络传输中的层!  然后介绍WPE的工作界面,以及各功能按扭的作用!  前面的内容属于了解阶段的内容,帮助您了解相关内容,对下面的学习会…

WPE 过滤器 滤镜 用法

过滤所有数值匹配的数据包&#xff0c;并修改指定的bit位 打开游戏 打开WPE 附加游戏进程 选项配置 用来配置抓取发送和接收包类型 先抓取发送包&#xff0c;也就是游戏中主动发给服务器的包 点击开始抓包 输入喊话内容 分别输入1和2进行抓包 结束抓包 显示…

WPE详细教程三

关于滤镜 经过前面的讲解,大家该知道封包制作外挂的原理了,这里再深入讲解一点,作为封包,按道理只能修改封包,达到修改游戏的目的,其实,如果我们能更广泛地想一想,如果我们能分析封包,其实是可以制作出很强大的功能的,当然,如果让WPE分析封包,能达到的功能是有限的…

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活&#xff0c;在加上陪伴自己的孩子没有时间更新文章了&#xff0c;这只能在晚上给大家写文档了&#xff0c;我最近在游戏公司上班&#xff0c;研究封包。我把这些东西都做成了笔记&#xff0c;我想有些东西是大家都想弄明白的&#xff0c;…

python 封包发包_python中封包建立过程实例

在python的变量使用中&#xff0c;有时候会赋予多个值一起使用&#xff0c;相信很多人一般都是添加一个值&#xff0c;对于这种多个赋值还没有接触过&#xff0c;其实这是python高级里的封包使用&#xff0c;我们在下面会进行简单的介绍&#xff0c;并解释建立封包的具体方法和…

安卓模拟器封包抓取加解密

什么是封包呢&#xff1f; 在网上也许能找到许许多多的答案&#xff0c;电脑端的比较多。但是好多都是比较旧的。这方面的知识相当的缺少。 封包就是数据&#xff0c;游戏向服务端发送的请求。就比如你游戏一顿操作&#xff0c;结束最后就是一条数据发给服务器。 封包常见的就有…