Android 语音播报之项目实战

TextToSpeech项目应用

  • 文字转语音
  • 官网简介
  • 项目前景
    • 项目实战
    • 真机调试
    • 结尾

文字转语音

       从文本合成语音以立即播放或创建声音文件。即TextToSpeech(以下简称TTS)
       TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。
       TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。现在的TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。TextToSpeech必须再被实例化之后才能使用.实现TextToSpeech.OnInitListener方法来获取实例化结果的提醒。当你已经使用完TextToSpeech实例之后, 应该调用shutdown()方法来释放TextToSpeech所使用的本地资源。

官网简介

具体详情可以去参考   链接地址:TextToSpeech

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目前景

       最近在项目应用到了语音播报功能。由于近期业务中,物联网蓝牙连接设备过程中,光有toast,客户感觉无感操作,故新增了语音播报功能。
       语音播报功能应用场景也很多的,所以我们从其中找符合自己的就可。

在这里插入图片描述

项目实战

在这里我单独拉出来一个项目,供各位老板参考一下,共同学习!

在这里插入图片描述
       当初在遇到语音播报的时候,不知道应用哪个好,开发周期比较紧张,所以引用了TextToSpeech,研发简单、简便。
       在研发过程中,遇到一个问题,第一次运行,语音播报正常。等活动页运行销毁后,第二次调起语音播报异常,无法播报的情况,这个问题已解决。

具体代码如下:

/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 语音播报监听开始、结束*/
public interface SpeakListener {void startSpeak(String text);void stopSpeak();
}
/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 语音播报工具类*/
public class SpeechUtils extends UtteranceProgressListener implements SpeakListener, TextToSpeech.OnUtteranceCompletedListener{private Context mContext;private static SpeechUtils singleton;private TextToSpeech mTextToSpeech; // 系统语音播报类private boolean isSuccess = true;/*** 单例模式* @param context* @return*/public static SpeechUtils getInstance(Context context) {if (singleton == null) {synchronized (SpeechUtils.class) {if (singleton == null) {singleton = new SpeechUtils(context);}}}return singleton;}private SpeechUtils(Context context) {this.mContext = context.getApplicationContext();mTextToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {@Overridepublic void onInit(int i) {//系统语音初始化成功if (i == TextToSpeech.SUCCESS) {//操作成功int result = mTextToSpeech.setLanguage(Locale.CHINA);mTextToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规mTextToSpeech.setSpeechRate(1.0f);mTextToSpeech.setOnUtteranceProgressListener(SpeechUtils.this);mTextToSpeech.setOnUtteranceCompletedListener(SpeechUtils.this);// TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失// TextToSpeech.LANG_NOT_SUPPORTED:不支持if (result == TextToSpeech.LANG_MISSING_DATA|| result == TextToSpeech.LANG_NOT_SUPPORTED) {//系统不支持中文播报isSuccess = false;}}}});}/*** 开始播报* @param text*/@SuppressLint("NewApi")@Overridepublic void startSpeak(String text) {if (!isSuccess) {Toast.makeText(mContext, "系统不支持中文播报", Toast.LENGTH_SHORT).show();return;}if (mTextToSpeech != null) {// QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,等前面的语音任务执行完了才会执行新的语音任务。// QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务mTextToSpeech.speak(text,TextToSpeech.QUEUE_ADD, null, null);}}/*** 结束播报*/@Overridepublic void stopSpeak() {if (mTextToSpeech != null) {mTextToSpeech.stop();}}/*** 语音播报完成回调* @param utteranceId*/@Overridepublic void onUtteranceCompleted(String utteranceId) {}@Overridepublic void onStart(String utteranceId) {}@Overridepublic void onDone(String utteranceId) {}@Overridepublic void onError(String utteranceId) {}
}
/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 主功能(TTS)*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private SpeechUtils speechUtils;private EditText editText;private ImageView speakButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}/*** 初始化控件*/private void initView() {speechUtils = SpeechUtils.getInstance(MainActivity.this);editText = findViewById(R.id.editText);speakButton = findViewById(R.id.btn);speakButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn:String speakText = editText.getText().toString().trim();boolean empty = StrUtils.isEmpty(speakText);if (empty) {//执行播报speechUtils.startSpeak("请您输入要播报的内容");Toast.makeText(MainActivity.this, "请您输入要播报的内容", Toast.LENGTH_SHORT).show();return;} else {speechUtils.startSpeak(speakText);Toast.makeText(MainActivity.this, speakText, Toast.LENGTH_SHORT).show();}break;}}/*** 销毁*/@Overrideprotected void onDestroy() {super.onDestroy();//结束播报speechUtils.stopSpeak();}
}

真机调试

语音播报,本人应用多版本真机进行了测试,目前没有发现什么问题,欢迎大家来补充!
真机分别:红米手机、华为手机、华为平板、华为鸿蒙系统手机、vivo手机,以上机型实测有效。

真机版本如下:





今天拿朋友的Android 4、7小米平板真机调试,系统不支持中文播放

结尾

欢迎各位老板光临寒舍,共同学习,留言探讨!

项目地址:Android 语音播报功能之项目实战

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42861.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必应(bing)搜索跳转到百度解决方法

一、删除浏览器插件 以谷歌浏览器为例,点击图片右上角处拓展功能,更多工具→拓展程序 将拓展程序移除即可 二、火狐恶性木马查杀工具 搜索火狐恶性木马查杀工具,在火狐吧即可免费下载,查杀病毒后重启

我们问了ChatGPT几个实时云渲染/Cloud XR的问题,结果发现……

和 宇宙大网红ChatGPT 交流有一段时间了, 感觉他时而靠谱,时而胡扯 当你将严肃问题丢给它时,它的回答科学么?严谨么? 今天,问几个平行云老本行,考考他! 除了最后一条,…

【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)

教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码 前言一、目前Python流行的几款股票行情分析指标计算库1. MyTT2. Ta-lib3. Pandas TA 二、指标计算的准备工作1.下载MyTT文件2.安装Ta-lib包3. 安装Pandas-ta包 三、分别用MyTT、Talib 、Pandas-ta计算5日均线、…

行业指数的周期以及跑赢指数的分位数是多少?

前言 本篇是量化系列的第一篇文章。《量化十万个为什么》系列旨在讨论一些自己心中的疑问,并且通过尝试解答这些问题来提升自己对于市场的认知水平。 PS:博主水平很辣鸡,请大家轻喷,多多指教! 一、为什么提这个问题&…

如何通过通达信接口获取最近的分钟级别行情数据?

如何通过通达信接口获取最近的分钟级别行情数据?对于做短线策略的交易者来说,得到实盘的量价数据之后,还需要把这些数据转换为各种技术指标,在策略中去使用和分析。 由于本地采样时间和交易所推送数据时间会有微小的差别&#xf…

POSTMAN 启动特别慢解决方案

需要为POSTMAN添加环境变量: 高级系统设置-环境变量 添加一个新的系统变量: 变量名:POSTMAN_DISABLE_GPU 变量值:true 重新启动POSTMAN

GPT套壳还能走多远?第一批AIGC创业公司开始裁员?新初创公司又该如何应对大模型的快速迭代升级?

AIGC创业投融资火爆推进,一则裁员公告却从天而降引爆关注: 公告来自首批AIGC明星独角兽Jasper。 早在ChatGPT爆火之前,AIGC也还不是大家耳熟能详的概念时,这家公司就已经背靠GPT-3,在18个月从白手起家到估值15亿美元。…

【Python】学习笔记

【Python】学习笔记 【Python】1. in和not in操作2.glob3.Pandas.apply()4.df.dropna()5.fine-tune迁移学习——Fine-tune蒸馏 参考文献 【Python】 1. in和not in操作 利用in和not in操作符,可以确定一个值是否在列表中。像其他操作符一样,in和not in…

聚观早报|OpenAI发文介绍保障AI安全的方法;王慧文AI公司正式开张

今日要闻:OpenAI发文介绍保障AI安全的方法;印度或首次参与iPhone15首批供货;胡润全球白手起家U40富豪榜发布;王慧文 AI 公司正式开张;吴以岭卸任以岭药业董事长 OpenAI发文介绍保障AI安全的方法 美国当地时间 4 月 5 …

手写操作系统+shell+文件系统,绝了

去年秋招及年后找工作的小伙伴应该感受到了寒气逼人,机会又少、又卷……加上chatGPT的出现,可以预见未来几年,简单、基础、重复性工作大概率会被机器人取代……我们将何去何从呢?毫无疑问,成为技术大牛! 如…

友盟分享QQ的时候提示应用未正确授权错误码901111

今天打包分享qq的时候突然出现应用未正确授权错误码901111 于是就上友盟和腾讯开放平台上找对应错误码,居然没有发现对应的错误码! 经过一番折腾后发现 这个错误是因为在腾讯开放平台没有提交apk的原因导致的 登录腾讯开放平台选择我们的应用 点击进…

微信授权APP第三方登陆(Android)

前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo&…

qq授权登录【网站应用】-java版本

第一步&#xff1a;先去qq互联进行创建网站应用&#xff1a;QQ互联 如下图&#xff1a; 第二步&#xff1a;引入qq的jar包&#xff0c;这里采用maven方式引用 <!--QQ坐标--><dependency><groupId>net.gplatform</groupId><artifactId>Sdk4J<…

微信授权登陆-app

app接入第三方微信登陆功能&#xff1a; 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统&#xff0c;前提你需要到微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通过的移动应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请…

Polkit授权管理

Polkit的配置&#xff1a; 查看polkit服务&#xff1a; 一个是agent&#xff0c;一个是polkit服务&#xff1b; agent包含监听接口和一个用户界面&#xff08;对话窗口&#xff09;&#xff0c;允许用户输入密码。Authentication Agent API Reference(https://www.freedesktop…

chatgpt赋能python:Python实现人脸识别

Python 实现人脸识别 随着人工智能技术的发展&#xff0c;人脸识别已经成为一个热门话题。Python作为一种流行的编程语言&#xff0c;也可以用来实现人脸识别。在这篇文章中&#xff0c;我们将介绍使用Python实现人脸识别的方法。 人脸识别的原理 人脸识别是通过计算机程序识…

比尔·盖茨到达北京;印度要求中国手机品牌高管应为印籍;Android 14 Beta 3 推出|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

亚马逊高调入局ChatGPT大战,发布Titan大模型、AI编程助手全免费,CEO:改变所有体验...

MLNLP社区是国内外知名的机器学习与自然语言处理社区&#xff0c;受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。 社区的愿景是促进国内外自然语言处理&#xff0c;机器学习学术界、产业界和广大爱好者之间的交流和进步&#xff0c;特别是初学者同学们的进步。 转载自 |…

【图像分割】TransUNet学习笔记

论文名称&#xff1a;TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2102.04306.pdf 代码地址&#xff1a;https://github.com/Beckschen/TransUNet 前言&#xff1a; TransUNet将Transformer和U-…

什么是分镜?用UniStory管理分镜,制定拍摄计划和讨论故事板

分镜是什么 一部成功的电影、电视剧、广告、Vlog等视觉体验&#xff0c;都离不开分镜创作 分镜又叫做故事版&#xff0c;用于早期电影内容的策划和制作&#xff0c;在电影拍摄之前根据导演的要求&#xff0c;用图表的方式来说明影像的构成。一般120分钟的电影&#xff0c;需要2…