•前言

  最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音;

  辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的问题:

  1. 模拟器如何联网
  2. 模拟器如何安装 TTS 引擎?
  3. 模拟器如何安装已下载好的 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学习之TTS踩坑笔记的更多相关文章

  1. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  2. CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记

    CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...

  3. ES踩坑笔记

    现在开始在业务上使用ES,记录一些踩坑经历,做点笔记. 2018-11-13 source不返回问题 使用了角色校验,客户端插入成功之后获取数据没有source,和查询参数无关. 检查mapping, ...

  4. Vue3.x+element-plus+ts踩坑笔记

    闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...

  5. 微信小程序使用pako.js的踩坑笔记

    问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...

  6. Android 之 ToolBar 踩坑笔记

    写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...

  7. 开始更新webpack踩坑笔记

    今天开始学习webpack,记录下踩过的坑-zxf

  8. TypeScript|Angular踩坑笔记

    今天按照Angular官网玩了下demo程序,踩了个小坑,记录下. TypeScript可以将变量申明为自定义类型,同时也不对该类型进行检查(不像C#,如果没有这个类型会报错) 比如下面这样: 如果我 ...

  9. clickhouse源码Redhat系列机单机版安装踩坑笔记

    前情概要 由于工作需要用到clickhouse, 这里暂不介绍概念,应用场景,谷歌,百度一大把. 将安装过程踩下的坑记录下来备用 ClickHouse源码 git clone安装(直接下载源码包安装失 ...

随机推荐

  1. DataTable.SELECT日期类型筛选处理

    初始化: public DataTable1() { InitializeComponent(); Init(); } private void Init() { dt = new DataTable ...

  2. [Azure Devops] 使用 Azure Boards 管理工作

    1. 什么是 Azure Boards 通过 Azure Boards 网络服务,团队可以管理其软件项目.它提供了丰富的功能,包括 Scrum 和看板的本地支持.可定制的仪表板和集成报告.这些工具可以 ...

  3. P1115_最大子段和(JAVA语言)

    思路:贪心.累加求和,若和小于0则设置和为0,因为和小于0时对这段序列和无正作用,只会使整体变小,所以我们把小于0的段舍弃,从下一个数开始求序列和. 题目描述 给出一段序列,选出其中连续且非空的一段使 ...

  4. 「HTML+CSS」--自定义加载动画【006】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  5. pwn题命令行解题脚本

    目录 脚本说明 脚本内容 使用 使用示例 参考与引用 脚本说明 这是专门为本地调试与远程答题准备的脚本,依靠命令行参数进行控制. 本脚本支持的功能有: 本地调试 开启tmux调试 设置gdb断点,支持 ...

  6. 围绕 Kubernetes 的 8 大 DevOps 生产关键实践

    本文主要介绍 DevOps 的 8 大关键实践在 Kubernetes 平台下如何落地,结合我们目前基于 Kubernetes 平台的 DevOps 实践谈谈是如何贯彻相关理念的,这里不会对其具体实现 ...

  7. [Fundamental of Power Electronics]-PART I-5.不连续导电模式-5.4 总结与重点

    5.4 总结与重点 基本的buck,boost以及buck-boost电路的特点总结在表5.2中.其中给出了\(K_{crit}(D)\)的表达式,CCM和DCM下的变换比,以及DCM下二极管导通占空 ...

  8. Nodejs入门(二)

    Nodejs基础api 1.path path模块提供了很多实用的工具函数,用于处理文件与目录的路径,下面是它的api: normalize 方法可以输出规范格式的path字符串 join 方法用于拼 ...

  9. [翻译]正式宣布 Visual Studio 2022

    原文: [Visual Studio 2022] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意见,或 ...

  10. 自学转行JAVA,没有项目经历怎么找工作?

    应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...