创新实训——第八周2

本次的工作对整个工程中我负责的部分进行了收尾。

首先将ChatInputLayout中的所有功能进行了完善,首先是语音识别功能的输出形式,系统键盘模式下正常输出,自定义键盘模式下需要将识别出的句子的字母与个性化字体库中的字体进行匹配。

给开始识别按钮添加的监听器

btStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkSoIsInstallSucceed();
                //mEtInput.setText("");
                //mIatResults.clear();
                // 设置参数
                setParam();
                boolean isShowDialog = mSharedPreferences.getBoolean(
                        getResources().getString(R.string.pref_key_iat_show), true);
                if(isShowDialog){
                    ret=mIat.startListening(mRecognizerListener);
                    if(ret!= ErrorCode.SUCCESS)
                    {
                        showTip("听写失败,错误码:"+ret);
                    }else{
                        showTip("请开始说话");
                    }
                }
            }
        });

其中showTip用来显示提示文字

private void showTip(final String str) {
        mToast.setText(str);
        mToast.show();
    }
mIat是一个语音听写对象,setParam方法就是用来在听写前设置其参数,来自讯飞语音识别
private SpeechRecognizer mIat;
public void setParam() {
        //参数设置
        // 清空参数
        mIat.setParameter(SpeechConstant.PARAMS, null);
        // 设置听写引擎
        mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
        // 设置返回结果格式
        mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
        mIat.setParameter(SpeechConstant.LANGUAGE,"en_us");
        // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
        mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));

        // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
        mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));

        // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
        mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));

        // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
        // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
        mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
        mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
    }

最后根据不同的输入模式来确定识别后的文本的输出形式,如果是自定义键盘模式,得到语音识别的文本后对文本进行的字母逐个判断并与字体库对应,根据音量进行粗细的变形。

private RecognizerListener mRecognizerListener = new RecognizerListener() {

        @Override
        public void onBeginOfSpeech() {
            // 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
            showTip("开始说话");
        }

        @Override
        public void onError(SpeechError error) {
            // Tips:
            // 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
            // 如果使用本地功能(语记)需要提示用户开启语记的录音权限。
            showTip(error.getPlainDescription(true));
        }

        @Override
        public void onEndOfSpeech() {
            // 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
            showTip("结束说话");
        }

        @Override
        public void onResult(RecognizerResult results, boolean isLast) {
            //Log.L(results.getResultString());
            System.out.println("间断结果——————————————————————————————————");
            printResult(results);
            if(isLast){
                //因为是last,所以new_piece稳定到了最终结果,不再变化。
                result_string+=new_piece;
                //针对不同的文本显示方式,系统字体,手写个性化字体
                String tag=mChangeModeLayout.getTag().toString();
                switch (tag){
                    case "1":
                        //系统字体
                        mEtInput.setText(result_string);
                        break;
                    case "2":
                        //手写个性化字体
                        //音量
                        sound=sound/soundCount;
                        showTip("平均音量"+sound);
                        if(sound<=18){
                            sound=2;
                        }else{
                            sound=sound/3;
                        }

                        for(int i=0;i<new_piece.length();i++){
                            int start=mEtInput.getSelectionStart();
                            char singleLetter=new_piece.charAt(i);
                            int pos=singleLetter-33;
                            Bitmap bmp;
                            if(pos==-1){
                                //空格键
                                bmp = Bitmap.createBitmap(MY_COL/2,MY_ROW, Bitmap.Config.ARGB_8888);//空白图片
                            }else if(myImageArrays[pos]!=null){
                                bmp = paintNewImage(myImageArrays[pos],10,sound,0);

                            }else{
                                bmp = Bitmap.createBitmap(MY_COL/2,MY_ROW, Bitmap.Config.ARGB_8888);//空白图片
                                showTip("个人字体库不完整!");
                            }
                            SpannableString ss=getBitmapMime1(bmp);
                            insertPhotoToEditText(ss);
                            count++;
                            inputBmpList.add(start,bmp);
                        }
                        sound=0;
                        soundCount=0;
                        break;
                    default:
                        break;
                }
            }
        }

        @Override
        public void onVolumeChanged(int volume, byte[] data) {
            showTip("当前正在说话,音量大小:" + volume);
            //LogUtil.L("返回音频数据:"+data.length);
            if(volume>5){
                sound+=volume;
                soundCount+=1;
            }

        }

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

三种信息输入方式的跳转(文本、语音识别、录音)

    @OnClick(R.id.iv_input_type)
    public void clickInputTypeBtn(){
        String tag=mIvInputType.getTag().toString();
        switch(tag){
            case "1":
                //说明现在为键盘输入界面,要更改为语音识别界面
                hideSoftInput(3);
                mExtensionLayout.setVisibility(GONE);
                mExpressLayout.setVisibility(GONE);
                mIvExpress.setImageResource(R.mipmap.expression);

                mIvInputType.setImageResource(R.mipmap.sound);
                mSoundRecogLayout.setVisibility(VISIBLE);
                mIvInputType.setTag("2");
                break;
            case "2":
                //说明现在为语音识别界面,要更改为录音界面
                hideSoftInput(3);
                mExtensionLayout.setVisibility(GONE);
                mExpressLayout.setVisibility(GONE);
                mIvExpress.setImageResource(R.mipmap.expression);
                mSoundRecogLayout.setVisibility(GONE);
                mEtInput.setVisibility(GONE);

                mBtnAudioRecord.setVisibility(VISIBLE);
                mIvInputType.setImageResource(R.mipmap.keyboard);
                mIvInputType.setTag("3");
                break;
            case "3":
                //说明现在为录音界面,要更改为键盘输入界面
                mBtnAudioRecord.setVisibility(GONE);
                mEtInput.setVisibility(VISIBLE);
                mIvInputType.setImageResource(R.mipmap.sound_recognise);

                //hideSoftInput(3);
                showSoftInput();
                mIvInputType.setTag("1");
            default:
                break;

        }
    }

隐藏键盘的方法,包括隐藏系统键盘和自定义键盘以及全部都隐藏

    private void hideSoftInput(int i) {
        switch(i){
            case 1://系统
                mInputManager.hideSoftInputFromWindow(mEtInput.getWindowToken(), 0);
                break;
            case 2://自定义
                mKeyboardLayout.setVisibility(GONE);
                myKeyboard.hideKeyboard();
                break;
            case 3://both
                mInputManager.hideSoftInputFromWindow(mEtInput.getWindowToken(), 0);
                mKeyboardLayout.setVisibility(GONE);
                myKeyboard.hideKeyboard();
                break;
            default:
                break;
        }

    }
隐藏所有已经显示的布局(键盘、表情、扩展)
    public void hideOverView(){
        if (isSoftInputShow()){
            hideSoftInput(3);
        }

        if (mExpressLayout.isShown()){
            mExpressLayout.setVisibility(GONE);
            mIvExpress.setImageResource(R.mipmap.expression);
        }

        if (mExtensionLayout.isShown()){
            mExtensionLayout.setVisibility(GONE);
        }

        if(mSoundRecogLayout.isShown())
        {
            mSoundRecogLayout.setVisibility(GONE);
        }
    }
和小组其他成员合并代码后基本完成项目内容,虽然还有很多不足之处,但是在这个过程中我对Android的开发知识有了一定的掌握,提高了自己的编程能力和团队协作能力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Aspen HYSYS是一种流程模拟软件,被广泛应用于化工和能源行业中的工程设计、优化和操作。通过Aspen HYSYS,用户可以模拟和分析各种化工流程,包括石油精炼、天然气加工、化工制造和能源生产等。 进行过程模拟实训时,我们可以利用Aspen HYSYS教程进行学习和实践。首先,我们需要下载Aspen HYSYS软件并完成安装。随后,我们可以寻找相应的Aspen HYSYS教程,这些教程通常以视频、文档或在线网页的形式提供。 教程通常会包含一系列实际案例和实验,我们可以按照这些案例进行模拟实践。通过跟随教程,我们可以学习到Aspen HYSYS的各种功能和操作技巧,掌握模拟化工流程的基本步骤和方法。 在教程中,我们可以学习到如何创建和编辑流程模型、添加和连接设备、定义物料性质和设定各种操作条件等。同时,我们还可以学习到如何进行流程优化、能耗分析和设备调整等高级操作。 通过实践和模拟,我们可以更加深入地了解化工流程中的一些关键参数和现象,并能够对流程进行优化和改进。此外,我们还可以通过模拟实践掌握操作软件的技巧,提高工作效率。 总的来说,通过Aspen HYSYS教程的模拟实训,我们可以在不实际进行现场操作的情况下,学习和掌握化工流程的模拟和分析技巧。这样的实训有助于提高工程技术人员的能力和竞争力,以及加强他们在化工和能源行业中的实际应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值