Android学习之TTS踩坑笔记
•前言
最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音;
辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的问题:
- 模拟器如何联网
- 模拟器如何安装 TTS 引擎?
- 模拟器如何安装已下载好的 apk 文件?
接下来就这些问题做出一一解答;
•准备工作
我在 Genymotion 上下载了两个模拟器,分别为 Android 7.0 , Android 8.0 , Android 9.0;
准备好如下文件,【】;
•模拟器如何联网?
打开【Oracle VM VirtualBox】,选中 Android 7.0 设备,点击【设置】;
来到如下界面,选中【网络】->【网卡 1】,点击【高级】,将【混杂模式】更改为全部允许;
接着打开【网卡 2】,将连接方式更改为【NAT】;
重启模拟器,打开浏览器输入 www.baidu.com 来检查网络连接情况;
虽然 WIFI 上有个的感叹号,但丝毫不影响模拟器联网;
Android 8.0 , Android 9.0 联网同上;
问题一解决 √;
•模拟器如何安装 apk?
将下载好的【qq.apk】以拖拽的方式安装到 Android 7.0 上;
你会发现,他会给你报错;
意思是说 Genymotion 是基于 X86 的,不支持 ARM 架构,所以基于 ARM 架构 的应用就无法安装。
解决方案
将【ARM_Translation_low_version.zip】拖拽到 Android 7.0 模拟器中;
如果出现如下界面:
恭喜你,安装成功,接下需要你重启该模拟器;
如果没有出现该界面,那么,就需要检查一下文件路径以及文件名:
- 文件路径不能包含中文,参考一下我的路径 E:\TTS\ARM_Translation_low_version.zip
- 文件名不能包含空格,比如把【ARM_Translation_low_version.zip】改成了【ARM_Translation low_version.zip】,这些操作都会导致拖放失败
此时,再次将【qq.apk】拖拽到 Android 7.0 上,拖放前一定要记得重启模拟器;
Android 8.0 , Android 9.0 模拟器安装 apk 方式同上,只需要将【ARM_Translation】更改为对应的【ARM】即可;
问题解决√;
•模拟器如何安装 TTS 引擎?
解决了第二个问题后,这个岂不变得 so easy~
将【GoogleTTS.apk】拖放到模拟器上,然后打开【设置】->【无障碍】->【文字转语音(TTS)输出】,
并将【首选引擎】更改为 Google 文字转语音引擎;
接下来就是检验阶段,新建一个 TestTTS 项目,添加如下代码;
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <EditText
android:id="@+id/main_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="input something"/> <Button
android:id="@+id/main_btn_speech"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发音" /> </LinearLayout>MainActivity.java
public class MainActivity extends AppCompatActivity { private TextToSpeech textToSpeech;
private EditText editText;
private Button mBtnSpeech; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); editText = findViewById(R.id.main_text);
mBtnSpeech = findViewById(R.id.main_btn_speech); textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) { //设置发音的语言
int result = textToSpeech.setLanguage(Locale.ENGLISH); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(MainActivity.this, "发音失败", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "发音成功", Toast.LENGTH_LONG).show();
}
}
}
}); mBtnSpeech.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textToSpeech.speak(editText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
});
}
}编译运行,自己本地测试一下,我这是可行的。
由于我找的这个【GoogleTTS.apk】支持的 Android 版本需要 ≥ 8.0,所以,要测试的话,还是要在 Android 8.0 或 Android 9.0 上测试。
•写在最后
兜兜转转捣鼓了好几天,还好成功了,感谢大佬们写的博客,助我一臂之力;
- 【Android模拟器Genymotion安装apk】
- 【win10安装 Genymotion ARM Translation教程(避免掉入大坑)】
- 【Android TTS系列一——如何让app具备tts能力】
Android学习之TTS踩坑笔记的更多相关文章
- EntityFramework CodeFirst SQLServer转Oracle踩坑笔记
接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...
- CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记
CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...
- ES踩坑笔记
现在开始在业务上使用ES,记录一些踩坑经历,做点笔记. 2018-11-13 source不返回问题 使用了角色校验,客户端插入成功之后获取数据没有source,和查询参数无关. 检查mapping, ...
- Vue3.x+element-plus+ts踩坑笔记
闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...
- 微信小程序使用pako.js的踩坑笔记
问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...
- Android 之 ToolBar 踩坑笔记
写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...
- 开始更新webpack踩坑笔记
今天开始学习webpack,记录下踩过的坑-zxf
- TypeScript|Angular踩坑笔记
今天按照Angular官网玩了下demo程序,踩了个小坑,记录下. TypeScript可以将变量申明为自定义类型,同时也不对该类型进行检查(不像C#,如果没有这个类型会报错) 比如下面这样: 如果我 ...
- clickhouse源码Redhat系列机单机版安装踩坑笔记
前情概要 由于工作需要用到clickhouse, 这里暂不介绍概念,应用场景,谷歌,百度一大把. 将安装过程踩下的坑记录下来备用 ClickHouse源码 git clone安装(直接下载源码包安装失 ...
随机推荐
- 死磕生菜 -- lettuce 间歇性发生 RedisCommandTimeoutException 的深层原理及解决方案
0x00 起源 项目的一些微服务集成了 Spring Data Redis,而底层的 Redis 客户端是 lettuce,这也是默认的客户端.微服务在某些环境中运行很正常,但在另一些环境中运行就会间 ...
- 利用Navicat premium实现将数据从Oracle导入到MySQL
背景:我们给用户提供了新的直播系统,但客户之前的老系统用的数据库是Oracle,我们提供的新系统用的是MySQL 客户诉求:将老系统中的所有直播数据导入到MySQL中: 思路:我知道Navicat有数 ...
- 推荐一份Web 工程师的前端书单
014年一月以来,自己接触web前端开发已经两年多了,记录一下自己前端学习路上看过的,以及道听途说的一些书,基本上按照由浅入深来介绍. JavaScript 入门 <JavaScript权威指南 ...
- 利用别名切换索引流程Elasticsearch 7.7
背景 公司里面现在有es集群,由于时间过长,es集群中的某个索引过大但是未删除,一直在写入的情况下,昨天写入突然停止了,发现是索引超时的问题,这时想到通过创建一个新的索引来进行索引切换 操作 es 集 ...
- 学习笔记-vue.js获取file文件数据
在vue中file不能像其他input一样使用 v-model 双向数据绑定,因为文件选择是只读,只能用onchange监控值得变化. 所有需要使用v-on:change去监控. 例1: <in ...
- Python使用sql语句对mysql数据库多条件模糊查询
1 def find_worldByName(c_name,continent): 2 print(c_name) 3 print(continent) 4 sql = " SELECT * ...
- python基础(四):切片和索引
Python中的序列有元组.列表和字符串,因此我们都可以通过索引和切片的方式,来获取其中的元素. 索引 Python中的索引,对于正向索引,都是从0开始的.但是对于反向索引,确实从-1开始的.如图所示 ...
- 强大的 Guava 工具类
Java 开发的同学应该都使用或者听说过 Google 提供的 Guava 工具包.日常使用最多的肯定是集合相关的工具类,还有 Guava cache,除了这些之外 Guava 还提供了很多有用的功能 ...
- C语言-字符串函数的实现(一)之strlen
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- 数据库MySQL六
介绍什么是JDBC JAVA SE也有 提高综合篇 JDBC(Java Database Connectivity) :java和数据库的连接技术,sun公司推出的一套java应用程序访问数据库的技术 ...












