首页 > 编程知识 正文

科大讯飞在线语音合成,科大讯飞语音合成怎么用

时间:2023-05-03 15:34:44 阅读:262769 作者:3379

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!完成,就是这么简单!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。