首页 > 编程知识 正文

讯飞离线语音合成服务,讯飞离线语音识别包安卓

时间:2023-05-04 10:16:38 阅读:262765 作者:4361

前言:目前市面上的语音合成平台有很多,讯飞,百度等等。目前使用讯飞tts语音合成。

语音合成分为方式:

一、使用讯飞语音开放平台在线语音合成SDK。

      优点:免费,有统计数据,发音人种类贼多。

      缺点:合成次数限制,装机量限制。免费版有时候因为网络因素会有延迟,次数没通过审核前<500次/天,装机量有限,需要                     提交引用审核方可提升至<2w次/天。审核要求是应用界面有讯飞语音技术支持。

二、使用讯飞语音开放平台离线语音合成SDK。

     优点:快,无延迟。

     缺点:收费。。。。

三、使用讯飞语记apk,进行语音合成。

     优点:快,免费,无延迟,无装机量限制,无合成次数限制。

     缺点:需要在安卓设备上安装讯飞语记apk,然后在开发者的应用中 调用讯飞语记的tts引擎。

前言总结:

      使用讯飞语记实现语音语音合成的好处:免费,不受制网络传输速度,发音人选择种类多,不限装机量,不限合成次数。

      实现过程:在自己的应用程序中,调用讯飞语记.apk来进行合成。下载地址:讯飞语记.apk

使用讯飞语记的步骤:

一、在自己的工程里加入jar包(sunflower.jar  &  Msc.jar )和各个so库,下载demo。

二、在工程里加入代码:

     1.初始化讯飞sdk:

         ①在自己的application中加入初始化讯飞sdk代码。

private void initItfly(){ // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成 //SpeechUtility对象为null // 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数: //SpeechConstant.FORCE_LOGIN+"=true" // 参数间使用“,”分隔。 // 设置你申请的应用appid // 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误 StringBuffer param = new StringBuffer(); param.append("appid=" + getString(R.string.app_id)); // param.append("appid=" + "11111111"); // param.append(","); // 设置使用v5+ // param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC); SpeechUtility utility = SpeechUtility.createUtility(this, param.toString()); try { mSpeechSynthesizerUtil = new SpeechSynthesizerUtil(getApplicationContext()); } catch (Exception e) { }}

           ②创建工具类 SpeechSynthesizerUtil。

/** * Created by Kai . * time on 2017/3/20. * design:语音合成工具类 */public class SpeechSynthesizerUtil { // 语音合成对象 public SpeechSynthesizer mTts; // 默认云端发音人 public static String voicerCloud = Constants.VOICERCLOUD; // // 云端发音人列表// private String[] cloudVoicersEntries; // 引擎类型 private String mEngineType = SpeechConstant.TYPE_LOCAL; private SharedPreferences mSharedPreferencesSpeech; //缓冲进度 private int mPercentForBuffering = 0; //播放进度 private int mPercentForPlaying = 0; private Context mContext; public SpeechSynthesizerUtil(Context context) { this.mContext = context; // 初始化合成对象 /** * 初始化监听。 */ InitListener mTtsInitListener = new InitListener() { @Override public void onInit(int code) { Util.LogUtil.d("InitListener init() code = " + code); if (code != ErrorCode.SUCCESS) { ToastUtil.showToast("初始化失败,错误码:" + code); } else { // 初始化成功,之后可以调用startSpeaking方法 // 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成, // 正确的做法是将onCreate中的startSpeaking调用移至这里 } } }; mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener);// 这里使用讯飞语记合成,就把下面设置参数的代码全注释掉。如果使用讯飞别的方式合成就别注释// mSharedPreferencesSpeech = context.getSharedPreferences(Constants.PREFER_NAME, Activity.MODE_PRIVATE); // 设置参数 // TODO:待取消注释代码// Util.setSpeechParam(mTts, mEngineType, mContext, mSharedPreferencesSpeech); } /** * 开始合成 */ public void startSpeech(String speakContent, OnCompletedListener onCompletedListener) { setOnCompletedListener(onCompletedListener); int code = mTts.startSpeaking(speakContent, mTtsListener);///**// * 只保存音频不进行播放接口,调用此接口请注释startSpeaking接口// * text:要合成的文本,uri:需要保存的音频全路径,listener:回调接口//*///String path = Environment.getExternalStorageDirectory()+"/tts.pcm";//int code = mTts.synthesizeToUri(text, path, mTtsListener); if (code != ErrorCode.SUCCESS) { if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) { ToastUtil.showToast("没有安装语音+ code = " + code); } else { ToastUtil.showToast("语音合成失败,错误码: " + code); } } } /** * 开始合成 */ public void startSpeech(String speakContent, SynthesizerListener listener) { int code = mTts.startSpeaking(speakContent, listener); ///** // * 只保存音频不进行播放接口,调用此接口请注释startSpeaking接口 // * text:要合成的文本,uri:需要保存的音频全路径,listener:回调接口 //*/ //String path = Environment.getExternalStorageDirectory()+"/tts.pcm"; //int code = mTts.synthesizeToUri(text, path, mTtsListener); if (code != ErrorCode.SUCCESS) { if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) { ToastUtil.showToast("没有安装语音+ code = " + code); } else { ToastUtil.showToast("语音合成失败,错误码: " + code); } } } //注册合成完毕后的监听事件 private OnCompletedListener mOnCompletedListener; public void setOnCompletedListener(OnCompletedListener mOnCompletedListener) { this.mOnCompletedListener = mOnCompletedListener; } public interface OnCompletedListener { void OnCompleted(); } /** * 合成回调监听。 */ public SynthesizerListener mTtsListener = new SynthesizerListener() { @Override public void onSpeakBegin() { Util.LogUtil.i("开始播放"); } @Override public void onSpeakPaused() { Util.LogUtil.i("暂停播放"); } @Override public void onSpeakResumed() { Util.LogUtil.i("继续播放"); } @Override public void onBufferProgress(int percent, int beginPos, int endPos, String info) { // ToastUtil.showToast(mContext,String.format(mContext.getString(R.string.tts_toast_format), } @Override public void onSpeakProgress(int percent, int beginPos, int endPos) { // 播放进度 mPercentForPlaying = percent; } @Override public void onCompleted(SpeechError error) { if(mOnCompletedListener!=null) mOnCompletedListener.OnCompleted(); if (error == null) { } else if (error != null) { ToastUtil.showToast(error.getPlainDescription(true)); } } @Override public void onEvent(int eventType, int arg1, int arg2, Bundle obj) { // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因 // 若使用本地能力,会话id为null //if (SpeechEvent.EVENT_SESSION_ID == eventType) { //String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID); //Log.d(TAG, "session id =" + sid); //} } };}

 

     2.判断本安卓设备是否下载讯飞语记录,没有就去下载。

//判断本机是否安装了讯飞语记 if (!SpeechUtility.getUtility().checkServiceInstalled()) { //未安装 String url = SpeechUtility.getUtility().getComponentUrl(); Uri uri = Uri.parse(url); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); }else { //已安装,开始合成TODO: }

     3.语音合成代码。 

/*** 第二个参数如果不想监听说话完毕的状态就传null,想监听就实现这个接口*/SampleApplication.getSpeechSynthesizerUtil().startSpeech("说话",this);

三、打开讯飞语记,设置自己喜欢的发音人,设置tts引擎。

    通用设置-->语音合成设置-->

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