700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 科大讯飞纯离线语音合成的快速集成

科大讯飞纯离线语音合成的快速集成

时间:2019-11-19 14:40:42

相关推荐

科大讯飞纯离线语音合成的快速集成

1,注册科大讯飞开发者,新建应用,下载离线语音合成SDK到本地

2,将下载好的SDK中的jar,assets文件下的tts包,.so文件复制到项目中

3,将下面的工具类复制到项目中

/**

* 语音合成器

*

* @author kongqw

*/

public class KqwSpeechSynthesizer {

// Log标签

private static final String TAG = "KqwSpeechSynthesizer";

private Context mContext;

// 语音合成对象

private SpeechSynthesizer mTts;

public KqwSpeechSynthesizer(Context context) {

mContext = context;

// 初始化合成对象

mTts = SpeechSynthesizer.createSynthesizer(context, new InitListener() {

@Override

public void onInit(int code) {

Log.d(TAG, "InitListener init() code = " + code);

if (code != ErrorCode.SUCCESS) {

Toast.makeText(mContext, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();

}

}

});

}

/**

* 开始语音合成

*/

public void start(String text) {

// 设置参数

setParam();

int code = mTts.startSpeaking(text, mTtsListener);

if (code != ErrorCode.SUCCESS) {

Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();

}

}

/**

* 结束语音合成

*/

public void stop() {

if (null != mTts) {

mTts.stopSpeaking();

// 退出时释放连接

mTts.destroy();

}

}

/**

* 合成回调监听。

*/

private SynthesizerListener mTtsListener = new SynthesizerListener() {

@Override

public void onSpeakBegin() {

Log.i(TAG, "开始合成");

}

@Override

public void onSpeakPaused() {

Log.i(TAG, "暂停合成");

}

@Override

public void onSpeakResumed() {

Log.i(TAG, "继续合成");

}

@Override

public void onBufferProgress(int percent, int beginPos, int endPos, String info) {

Log.i(TAG, "传冲进度 :" + percent);

}

@Override

public void onSpeakProgress(int percent, int beginPos, int endPos) {

// Log.i(TAG, "合成进度 : " + percent);

}

@Override

public void onCompleted(SpeechError speechError) {

if (speechError == null) {

Log.i(TAG, "合成完成");

} else {

Log.i(TAG, "error : " + speechError.toString());

}

}

@Override

public void onEvent(int i, int i1, int i2, Bundle bundle) {

}

};

/**

* 参数设置

*/

private void setParam() {

// 清空参数

mTts.setParameter(SpeechConstant.PARAMS, null);

// 设置使用本地引擎

mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);

// 设置发音人资源路径

mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());

// 设置发音人

mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");

// 设置语速

mTts.setParameter(SpeechConstant.SPEED, "50");

// 设置音调

mTts.setParameter(SpeechConstant.PITCH, "50");

// 设置音量

mTts.setParameter(SpeechConstant.VOLUME, "50");

// 设置播放器音频流类型

mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");

}

// 获取发音人资源路径

private String getResourcePath() {

// 合成通用资源

// 发音人资源

return ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet") + ";" +

ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaoyan.jet");

}

}

4,项目中使用

首先在Application中初始化:

String param = "appid=5c6224f9," + SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC;

SpeechUtility.createUtility(this, param); //将这里的appid的值替换成你在第一步中拿到的appid的值

然后在有需要的页面使用:

在onCreate中初始化工具类:mKqwSpeechSynthesizer = new KqwSpeechSynthesizer(this);

在具体要语音播报的地方调用:mKqwSpeechSynthesizer.start(speckContent);

在onDestory中释放:mKqwSpeechSynthesizer.stop();

OK!完成,就是这么简单!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。