学更好的别人,
做更好的自己。
——《微卡智享》
本文长度为1633字,预计阅读5分钟
划重点
所谓活到老,学到老,本篇开始我写的Android代码尽量都转为Android指定的官方语言Kotlin,一是技多不压身,二是Kotlin的语法与我接触的第一门开发语言Delphi有点像,学起来也不太难,所以直接在代码中开始使用才能掌握的更快。
Android本地TTS语音合成
前两天做WinForm项目中,有客户需求是加入语音提示,同事的努力下也是花了两天时间给更新上线了,由于我做的Android端用的手持PDA较多,在使用过程中如果有语音提示,会让用户使用起来更方便些,于是这篇就主要研究下Android端的TTS语音合成。
实现效果
TextToSpeech介绍使用
TextToSpeech
其实调用本地TTS语音识别非常的简单,一共就那么几个方法,麻烦的是在初始的配置上,我们就先来说一下使用方法
主要用到的两个包
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
其中OnInitListener是要必须实现的,如下
mSpeech = TextToSpeech(this, TextToSpeech.OnInitListener {if(it == TextToSpeech.SUCCESS) {val i = mSpeech.setLanguage(Locale.CHINESE)if(i == TextToSpeech.LANG_MISSING_DATA || i == TextToSpeech.LANG_NOT_SUPPORTED) {mSpeech.setSpeechRate(1.0f)tvshow.text = "设置中文语音失败"} else{tvshow.text = "初始化成功"}} else{tvshow.text = "初始化失败"}})
通过上面的代码我们先初始化了TTS的引擎,我们再列几个常用的函数就可以直接使用了
代码演示
微卡智享
我们新建了一个TTSDemo的项目,先看一下布局文件
activity_main.xml
<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tvshow"android:text="Hello World!"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/edttext"android:hint="请输入语音合成的文字"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btn1"android:text="TTS语音合成"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btn2"android:text="TTS语音设置"/></LinearLayout>
Mainactivity.kt
package dem.vac.ttsdemoimportandroid.Manifestimportandroid.Manifest.permission.WRITE_EXTERNAL_STORAGEimportandroid.content.Intentimportandroid.content.pm.PackageManagerimportandroid.os.Bundleimportandroid.speech.tts.TextToSpeechimportandroid.widget.Buttonimportandroid.widget.EditTextimportandroid.widget.TextViewimportandroidx.appcompat.app.AppCompatActivityimportandroidx.core.app.ActivityCompatimportjava.util.*classMainActivity : AppCompatActivity() {lateinit vartvshow: TextViewlateinit varedtinput: EditTextlateinit varbtn1: Buttonlateinit varbtn2: Buttonlateinit varmSpeech: TextToSpeechoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)tvshow = findViewById(R.id.tvshow)//初始化TTSmSpeech = TextToSpeech(this, TextToSpeech.OnInitListener {if(it == TextToSpeech.SUCCESS) {val i = mSpeech.setLanguage(Locale.CHINESE)if(i == TextToSpeech.LANG_MISSING_DATA || i == TextToSpeech.LANG_NOT_SUPPORTED) {mSpeech.setSpeechRate(1.0f)tvshow.text = "设置中文语音失败"} else{tvshow.text = "初始化成功"}} else{tvshow.text = "初始化失败"}})edtinput = findViewById(R.id.edttext)//朗读btn1 = findViewById(R.id.btn1)btn1.setOnClickListener { view ->varstr: String= edtinput.text.toString();if(str != "") {mSpeech.speak(str, TextToSpeech.QUEUE_ADD, null)}}//设置btn2 = findViewById(R.id.btn2)btn2.setOnClickListener { view ->varintent = Intent("com.android.settings.TTS_SETTINGS")startActivity(intent)}}}
通过上面的代码,我们就可以实现TTS的朗读了,我的是Android 4.1的虚拟机,默认的本地TTS是PICO的,里面没有中文,无法进行中文的朗读,如下图
如果想要实现中文的朗读,我们就需要下载一个讯飞的语音合成离线包,安装后设置这个TTS后即可实现,我这网盘有个APK的下载地址
链接:/s/110AG3JyxipTKrIfDkcppaA
提取码:bflk
点击安装后,我们重新打开TTS设置就会出现,选择用讯飞语音合成
里面就会有中文的语音了
这一章主要讲了TTS的简单使用,产品在用户体验上要不断的打磨,像刚才我们安装讯飞语音,下一章我们就来看看怎么样检测如果没安装讯飞语音自动下载提示安装的方法。
完
扫描二维码
获取更多精彩
微卡智享
「 往期文章 」
实战|Android文字滚动自定义动画
学习|Android属性动画TypeEvaluator和Interpolator使用
学习|Android属性动画的组合动画之二--AnimatorSet