一对一直播源码开发之接入百度语音识别

发布来源:云豹科技
发布人:云豹科技
2022-07-07 10:01:23

随着一对一直播源码功能的不断丰富和深入,用户私聊成为不可或缺的模块,说到用户私聊功能,就不得不提到语音识别。语音识别丰富了用户输入的方式,让用用户可以告别繁琐复杂的文字输入,提高一对一直播源码的灵活性,本文将介绍在Android中集成使用百度语音识别的具体过程。   

一、注册和创建              

1、注冊开放平台,点击管理控制台,选择移动应用管理

图片1.png                                       

2、选择创建应用,填写应用名称

图片2.png

图片3.png

注意:技术人员能够看到右上角有ID、API KEY、Secret KEY,点击能够复制其内容,保存这些字符串,在使用语音SDK时会用到;

图片4.png

二、申请开启语音识别服务

1、选择媒体云---语音识别,点击申请开启服务,填写理由

图片5.png

2、等待对接成功

图片5.png

三、准备接入语音识别SDK

1、将开发包中的lib中的库加入到project中

声明权限:

     <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />


四、语音识别

一对一直播源码接入SDK有两种实现语音识别的方式,一种是直接使用SDK中的语音识别控件,一种是使用SDK中的语音识别服务,在这里我们主要介绍一下一对一直播源码如何通过语音识别控件进行功能实现。

语音识别控件BaiduASRDigitalDialog,提供了整套语音交互、提示音、音量反馈、动效反馈等功能。开发人员初始化一个BaiduASRDigitalDialog对象,并设置相关參数及结果回调。一对一直播源码调用Show()方法就能够弹出对话框开始识别,识别结束后会在回调中得到识别结果。

1、整体代码:

if (mDialog == null || mCurrentTheme != Config.DIALOG_THEME) {
                    mCurrentTheme = Config.DIALOG_THEME;
                    if (mDialog != null) {
                        mDialog.dismiss();
                    }
                    Bundle params = new Bundle();
                    params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, Constants.API_KEY);
                    params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, Constants.SECRET_KEY);
                    params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);
                    mDialog = new BaiduASRDigitalDialog(this, params);
                    mDialog.setDialogRecognitionListener(mRecognitionListener);
                }
                mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP, Config.CURRENT_PROP);
                mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE,
                        Config.getCurrentLanguage());
                mDialog.show();


注意:识别对话框支持的參数定义在BaiduASRDigitalDialog中以PARAM_前缀的常量,列表例如以下:


图片7.png

图片8.png

2、设置回调方法,处理返回的结果

 mRecognitionListener = new DialogRecognitionListener() {
 
            @Override
            public void onResults(Bundle results) {
                ArrayList<String> rs = results != null ? results
                        .getStringArrayList(RESULTS_RECOGNITION) : null;
                if (rs != null && rs.size() > 0) {
                    mResult.setText(rs.get(0));
                }
 
            }
        };


3、API方式

(1)配置语音识别引擎ASREngine的參数VoiceRecognitionConfig:

VoiceRecognitionConfig config = new VoiceRecognitionConfig();
                config.setProp(Config.CURRENT_PROP);
                config.setLanguage(Config.getCurrentLanguage());
                config.enableVoicePower(Config.SHOW_VOL); // 音量反馈。
                if (Config.PLAY_START_SOUND) {
                    config.enableBeginSoundEffect(R.raw.bdspeech_recognition_start); // 设置识别開始提示音
                }
                if (Config.PLAY_END_SOUND) {
                    config.enableEndSoundEffect(R.raw.bdspeech_speech_end); // 设置识别结束提示音
                }             config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K); // 设置採样率,须要与外部音频一致,然后启动识别
 int code = mASREngine.startVoiceRecognition(mListener, config);


(2)mListener当中是识别过程的回调,须要对当中的方法进行实现:

 /**
     * 重写用于处理语音识别回调的监听器
     */
    class MyVoiceRecogListener implements VoiceClientStatusChangeListener {
 
        @Override
        public void onClientStatusChange(int status, Object obj) {
            switch (status) {
            // 语音识别实际開始。这是真正開始识别的时间点,需在界面提示用户说话。
                case VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:
                    isRecognition = true;
                    mHandler.removeCallbacks(mUpdateVolume);
                    mHandler.postDelayed(mUpdateVolume, POWER_UPDATE_INTERVAL);
                    mControlPanel.statusChange(ControlPanelFragment.STATUS_RECORDING_START);
                    break;
                case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START: // 检測到语音起点
                    mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);
                    break;
                // 已经检測到语音终点,等待网络返回
                case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:
                    mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);
                    break;
                // 语音识别完毕,显示obj中的结果
                case VoiceRecognitionClient.CLIENT_STATUS_FINISH:             mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);
                    isRecognition = false;
                    updateRecognitionResult(obj);
                    break;
                // 处理连续上屏
                case VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:
                    updateRecognitionResult(obj);
                    break;
                // 用户取消
                case VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:               mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);
                    isRecognition = false;
                    break;
                default:
                  break;
            }
        }
        @Override
        public void onError(int errorType, int errorCode) {
            isRecognition = false;
            mResult.setText(getString(R.string.error_occur, Integer.toHexString(errorCode)));
            mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);
        }
        @Override
        public void onNetworkStatusChange(int status, Object obj) {
            // 这里不做不论什么操作不影响简单识别
        }
    }


4、获得识别BDVRClient对象

mASREngine = VoiceRecognitionClient.getInstance(this);
        mASREngine.setTokenApis(Constants.API_KEY, Constants.SECRET_KEY);


(1)请求參数设置:

一对一直播源码每次识别需要通过VoiceRecognitionConfig设置參数,当中一些方法在API中有说明

图片9.png

图片10.png

5、开始语音识别,BDVRClient在開始识别后,会启动录音、预处理、上传到server并获取识别结果。

 int code = mASREngine.startVoiceRecognition(mListener, config);
                if (code != VoiceRecognitionClient.START_WORK_RESULT_WORKING) {
                    mResult.setText(getString(R.string.error_start, code));
                }


6、取消语音识别

 mASREngine.stopVoiceRecognition();


7、结束语音识别

mRecognitionClient.speakFinish();


以上即为Android端一对一直播源码中接入百度语音识别的过程,语音识别接入大大降低了语音方面开发的成本,丰富了即时通讯功能,便于应用的使用及推广。

声明:以上内容为云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com

声明:
以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任
立即查看