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安装(直接下载源码包安装失 ...
随机推荐
- WinFrom与百度地图完美交互
如何在WinFrom上显示百度地图,也许这个很多人会说这个很容易,但是如何实现WinFrom与百度地图的完美交互,如果在Winfrom的控制输入经纬度,准确定位出在百度地图上,并且还能显示出具体的地址 ...
- MediaCodec编码结合FFmpeg封装流
在Android平台上合成视频一般使用MediaCodec进行硬编码,使用MediaMuxer进行封装,但是因为MediaMuxer在某些机型上合成的视频在其他手机上播放会出现问题,而且只支持一个音频 ...
- bjd_ctf
1.抓包修改 提示修改id,postman修改headers里面的id 分析得到id是admin加admin的base64编码,payload为id: adminYWRtaW4= 请求后又提示请使 ...
- MySQL深入研究--学习总结(5)
前言 接上文,继续学习后续章节.细心的同学已经发现,我整理的并不一定是作者讲的内容,更多是结合自己的理解,加以阐述,所以建议结合原文一起理解. 第20章<幻读是什么,幻读有什么问题?> 先 ...
- Android Studio中Switch控件有关 textOn 和 textOff 用法
•属性 textOn:控件打开时显示的文字 textOff:控件关闭时显示的文字 showText:设置是否显示开关上的文字(API 21及以上) •用法 <?xml version=" ...
- 体验用yarp当网关
Yarp是微软开源的一个用.net实现的反向代理工具包,github库就叫reverse-proxy(反向代理)(吐槽一下微软起名字233333) nuget包preview9之前都叫Microsof ...
- Go 类型转换与类型判断
目录 Go 类型转换与类型判断 1.类型转化 2.类型判断 Go 类型转换与类型判断 1.类型转化 T(a) : T 是目标类型 a 是源变量 package main import "fm ...
- 19. slot插槽传递模板
插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 插槽模板是slot,它是一个空壳子,因为它显示与隐藏以及最后用什么样的html模板显示由父组件控制.但 ...
- The Blocks Problem UVA - 101
Many areas of Computer Science use simple, abstract domains for both analytical and empirical stud ...
- matlab文件管理
当前文价夹浏览器以及路径管理器 在主页面左侧有单独的窗口进行显示,可以显示当前目录下的文件并提供文件搜索功能. 搜索路径 搜索先后步骤 输入字符串"polyfit" (1)检查 ...












