Android实现TTS文字转语音功能
Posted Android_小黑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android实现TTS文字转语音功能相关的知识,希望对你有一定的参考价值。
本文地址:https://blog.csdn.net/qq_40785165/article/details/122746461,转载需附上此链接
简单是稳定的前提。
大家好,我是小黑,一个还没秃头的程序员~~~
这次给大家介绍一个android自带的功能——TTS文字转语音,即将输入的文字以音频的形式朗读或存储成为文件。使用的是Android自带的TextToSpeech类,话不多说,正文开始
(一)初始化
TextToSpeech有两个主要的构造函数
- TextToSpeech(Context context, OnInitListener listener)
- TextToSpeech(Context context, OnInitListener listener, String engine)
TextToSpeech mTextToSpeech;
mTextToSpeech = new TextToSpeech(this, this, "com.iflytek.speechcloud")
参数 | 说明 |
---|---|
context | 上下文 |
listener | 初始化监听 |
context | 引擎的包名 |
上面的引擎中,如科大讯飞引擎的包名为com.iflytek.speechcloud,用于手机默认引擎非科大讯飞引擎时手动设置,但前提是手机已安装科大讯飞文字转语音引擎,否则无法设置
注:若手机上未安装科大讯飞引擎,可到我的资源中下载引擎安装应用,https://download.csdn.net/download/qq_40785165/85041048
初始化的结果由TextToSpeech.OnInitListener返回,具体代码如下:
@Override
public void onInit(int status)
//设置朗读的语言是中文
int language = mTextToSpeech.setLanguage(Locale.CHINA);
if (language == TextToSpeech.LANG_MISSING_DATA || language == TextToSpeech.LANG_NOT_SUPPORTED)
Toast.makeText(this, "不支持中文或语言数据丢失", Toast.LENGTH_SHORT).show();
(二)添加朗读配置
朗读状态监听由UtteranceProgressListener返回,具体代码如下:
mTextToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener()
@Override
public void onStart(String utteranceId)
//朗读中
@Override
public void onDone(String utteranceId)
//朗读结束
@Override
public void onError(String utteranceId)
//朗读失败
);
设置其他配置
// 设置音调,可模拟男女声
mTextToSpeech.setPitch(1.0f);
// 设置语速
mTextToSpeech.setSpeechRate(1f);
(三)朗读或者保存为文件
朗读:
speak(final CharSequence text,
final int queueMode,
final Bundle params,
final String utteranceId)
参数 | 说明 |
---|---|
text | 要朗读的文本串。 长度不超过4000 |
queueMode | 使用的队列策略,QUEUE_ADD或QUEUE_FLUSH。 |
params | 请求的参数。 可以为空,可是携带如引擎包名、音量等参数 |
utteranceId | 此请求的唯一标识符 |
其他的函数
- isSpeaking 是否在朗读
- stop 中断当前的话语(无论是播放还是呈现到文件中),并丢弃队列中的其他话语。
- shutdown 释放资源,可在onDestroy中进行
具体代码如下:
mTextToSpeech.speak(content, TextToSpeech.QUEUE_FLUSH, null, getClass().getName());
保存为文件:
synthesizeToFile(final CharSequence text, final Bundle params,
final File file, final String utteranceId)
参数 | 说明 |
---|---|
text | 要合成的文本串。 长度不超过4000 |
file | 生成的音频数据写入的文件 |
params | 请求的参数。 可以为空 |
utteranceId | 此请求的唯一标识符 |
具体代码如下:
int result = mTextToSpeech.synthesizeToFile(content, null, mMp3Path, this.getClass().getName());
if (result >= 0)
//执行了合成逻辑,但此时不一定生成了文件
else
//该文本无法转成音频
注:朗读和合成文件都属于异步操作,调用API时就会返回结果,合成不一定完成甚至还未开始,所以要合理利用上面设置的状态监听进行后续操作
今天的介绍就到此为止,内容并没有什么难度,只是分享一个有趣的知识,后面还有学习到有趣的工具或者功能,我都会陆续和大家分享,谢谢大家的阅读!晚安!
以上是关于Android实现TTS文字转语音功能的主要内容,如果未能解决你的问题,请参考以下文章