今天在开发中做了一个文字转为语音的功能,入了很多坑。
首先我采用的是科大讯飞的在线语音合成技术。写完之后他可以在低版本的手机上读出来,但是再高版本的7.0以上就读不出来,都听不懂再读什么。
下面贴出我的代码: 首先再科大讯飞官网创建应用,拿到APPID 然后再生成sdk jar包 这个我就不拿出来了 非常简单去官网搞一下就行
这个是文字转语音的工具类:
public class AudioUtils {
private static AudioUtils audioUtils;
private SpeechSynthesizer mySynthesizer;
public AudioUtils() {
}
/**
* 描述:单例
* 作者:张学斌
* 创建时间: 2017/8/19 14:38
*/
public static AudioUtils getInstance() {
if (audioUtils == null) {
synchronized (AudioUtils.class) {
if (audioUtils == null) {
audioUtils = new AudioUtils();
}
}
}
return audioUtils;
}
private InitListener myInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d("mySynthesiezer:", "InitListener init() code = " + code);
}
};
/**
* 描述:初始化语音配置
* 作者:张学斌
* 创建时间: 2017/8/19 14:38
*/
public void init(Context context) {
//处理语音合成关键类
mySynthesizer = SpeechSynthesizer.createSynthesizer(context, myInitListener);
//设置发音人
mySynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
//设置音调
mySynthesizer.setParameter(SpeechConstant.PITCH, "50");
//设置音量
mySynthesizer.setParameter(SpeechConstant.VOLUME, "50");
mySynthesizer.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
}
/**
* 描述:根据传入的文本转换音频并播放
* 作者:张学斌
* 创建时间: 2017/8/19 14:39
*/
public void speakText(String content) {
int code = mySynthesizer.startSpeaking(content, new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakResumed() {
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
}
@Override
public void onCompleted(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
});
}
}
使用的时候再Application注册 初始化一下,
SpeechUtility.createUtility(getApplicationContext(), "appid=你创建应用的时候生成的APPID");
AudioUtils.getInstance().init(getApplicationContext());
使用:
AudioUtils.getInstance().speakText("你好");
这个我不知道怎么适配高版本的手机,所以没有采用这种方式。
我使用的是Android 系统自带的文字转语音 这种方式很简单也非常好用,(简单粗暴直接实现你想要的效果)
直接上手撸代码:
private TextToSpeech mTextToSpeech;
private void speakChina(){
//设置朗读语言
mTextToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status==TextToSpeech.SUCCESS) {
//设置朗读语言
int supported= mTextToSpeech.setLanguage(Locale.US);
if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
Toast.makeText(sAppContext, "不支持当前语言!", Toast.LENGTH_SHORT).show();
}
}
}
});
}封装的一个方法
使用
mTextToSpeech.speak("这个填你想要转成语音的文字", TextToSpeech.QUEUE_FLUSH, null);
好了这就实现了文字转语音的功能。
希望能对猿们提供一些帮助!