一.官网下载SDK

https://www.xfyun.cn/

1.1项目创建

APPID是项目调用SDK会用到的

1.2SDK下载

二.代码调用

2.1在Application中初始化SDK

    /**
     * @author Longchengbin
     * @description 初始化讯飞语音
     * @since 2020-10-22 11:42
     **/
    private void initXFYY() {
        // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史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(",");
        // 设置使用v5+
        param.append(SpeechConstant.ENGINE_MODE+"="+SpeechConstant.MODE_MSC);
        SpeechUtility.createUtility(TvApp.this, param.toString());
    }

2.2代码中调用语音播报

   /*+++++++++++++++++++++++++++  语音播报   +++++++++++++++++++++++++++ */

    /**
     * @author Longchengbin
     * @description 播报的车牌号
     * @since 2020-11-3 10:48
     **/
    private void play(String num) {
        setParam();
        String string = getString(R.string.pay, num, num);
        mTts.startSpeaking(string, mTtsListener);
    }

    /**
     * @author Longchengbin
     * @description 初始化语音播报的参数
     * @since 2020-10-22 13:56
     **/
    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, "xiaofeng");
        //设置合成语速 在线0~100本地0~200
        mTts.setParameter(SpeechConstant.SPEED, "33");
        //设置合成音调 范围 0~100
        mTts.setParameter(SpeechConstant.PITCH, "99");
        //设置合成音量 范围 0~100
        mTts.setParameter(SpeechConstant.VOLUME, "99");
        //设置播放器音频流类型0通话1系统2铃声3音乐4闹铃5通知
        mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
        // 设置播放合成音频打断音乐播放,默认为true
        mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
        // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
        mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
        mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH,
                Environment.getExternalStorageDirectory() + "/msc/tts.wav");
    }

    /**
     * @author Longchengbin
     * @description 获取发音人本地资源
     * @since 2020-10-22 13:57
     **/
    private String getResourcePath() {
        StringBuffer tempBuffer = new StringBuffer();
        String type = "tts";
        //合成通用资源
        tempBuffer.append(ResourceUtil.generateResourcePath(this,
                ResourceUtil.RESOURCE_TYPE.assets, type + "/common.jet"));
        tempBuffer.append(";");
        //发音人资源
        tempBuffer.append(ResourceUtil.generateResourcePath(this,
                ResourceUtil.RESOURCE_TYPE.assets, type + "/xiaofeng.jet"));
        return tempBuffer.toString();
    }

    /**
     * 初始化监听
     */
    private InitListener mTtsInitListener = new InitListener() {
        @Override
        public void onInit(int code) {
            if (code != ErrorCode.SUCCESS) {
                Log.e("lcb", "语音合成失败,错误码: " + code 
                        + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案");
            }
        }
    };

    /**
     * 合成回调监听。
     */
    private SynthesizerListener mTtsListener = new SynthesizerListener() {

        @Override
        public void onSpeakBegin() {
//            Log.e("lcb", "开始播放:" + System.currentTimeMillis());
        }

        @Override
        public void onSpeakPaused() {
            Log.e("lcb", "暂停播放");
        }

        @Override
        public void onSpeakResumed() {
            Log.e("lcb", "继续播放");
        }

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

        @Override
        public void onSpeakProgress(int percent, int beginPos, int endPos) {
            // 播放进度
        }

        @Override
        public void onCompleted(SpeechError error) {
            if (error == null) {
                Log.e("lcb", "播放完成");
            } else {
                Log.e("lcb", error.getPlainDescription(true));
            }
        }

        @Override
        public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
        }
    };

2.3资源调用

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐