最近项目需求,要在android里面实现语音转文字朗读,TTS,于是上网各种搜索,比较好的是android有自带原生的api可以直接使用,android.speech.tts.TextToSpeech。封装一个java类方便使用,代码如下:
package dione.healthclub;
import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.widget.Toast;
import java.util.Locale;
public class AJTextToSpeech implements TextToSpeech.OnInitListener {
private Context mContext;
private TextToSpeech mTTS;
public AJTextToSpeech(Context context){
mContext = context;
mTTS = new TextToSpeech(mContext,this);
}
public boolean speak(final String text){
Log.d("dione","speak text:"+text);
// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
mTTS.setPitch(1.0f);
// 设置语速
mTTS.setSpeechRate(1.0f);
//播放语音
int ret = mTTS.speak(text,TextToSpeech.QUEUE_ADD,null);
if(ret == 0) {
Toast.makeText(mContext, "文字转语音成功...", Toast.LENGTH_SHORT).show();
return true;
}
else {
Toast.makeText(mContext, "文字转语音错误...", Toast.LENGTH_SHORT).show();
return false;
}
}
@Override
public void onInit(int status) {
// 判断是否转化成功
if (status == TextToSpeech.SUCCESS){
//默认设定语言为中文,原生的android貌似不支持中文。
int result = mTTS.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
Toast.makeText(mContext, "数据丢失或不支持..."+String.valueOf(result), Toast.LENGTH_SHORT).show();
}else{
//不支持中文就将语言设置为英文
mTTS.setLanguage(Locale.US);
}
}
}
}
将该java加入到自己的工程基本上就可以实现英文的语音转文字朗读。
TextToSpeech mTTS = new TextToSpeech(Context,this);
mTTS.speak("TTS中文朗读");
两句话就可以使用了。
一般系统都没有带中文TTS,不安装语音插件的情况下是可以直接实现英文朗读。
使用中文朗读:将TTS讯飞语音包(底部地址下载)解压出来的两个apk安装到android系统里面,然后在设置 -- 语言和输入法--文字转语音TTS输出--选择科大讯飞语音。
按照如上操作后android系统就支持了中文语音朗读。
仅供学习参考,by Dione.
完整代码已经中文语音插件apk下载地址:https://download.csdn.net/download/u012532263/10885562