小程序语音识别,讯飞接口

小程序端利用录音接口(wx.getRecorderManager()),获取用户录音文件,然后将录音文件传往服务器,服务器再将文件传往讯飞,并返回识别结果,录音文件可设置为mp3,讯飞可直接识别MP3格式的文件。

public JSONObject recording(HttpServletRequest request, HttpServletResponse response, MultipartFile file) {
        JSONObject jsonObject = new JSONObject();
        String picturename = System.currentTimeMillis() + FileUtil.getFileName(file.getOriginalFilename());
        String filePath = Global.getUserfilesBaseDir() + "userfiles/recording/" + picturename;
        File saveDir = new File(filePath);

        if (!saveDir.getParentFile().exists())
            saveDir.getParentFile().mkdirs();

        try {
            file.transferTo(saveDir);
        } catch (IOException e) {
            e.printStackTrace();
            jsonObject.put("success", false);
            return jsonObject;
        }

	//非常重要!非常重要!非常重要!非常重要!非常重要!
        PropertyConfigurator.configure(this.getClass().getClassLoader().getResourceAsStream("/config.properties"));
        PropertyConfigurator.configure(this.getClass().getClassLoader().getResourceAsStream("/log4j.properties"));

        // 初始化LFASR实例
        LfasrClientImp lc = null;
        try {
            lc = LfasrClientImp.initLfasrClient(Constant.XunFeiAPPID,Constant.XunFeiSECRET);
        } catch (LfasrException e) {
            // 初始化异常,解析异常描述信息
            Message initMsg = JSON.parseObject(e.getMessage(), Message.class);

            jsonObject.put("success",false);
            return jsonObject;
        }

        // 获取上传任务ID
        String task_id = "";
        HashMap<String, String> params = new HashMap<>();
        params.put("has_participle", "true");
        try {
            // 上传音频文件
            Message uploadMsg = lc.lfasrUpload(filePath, type, params);

            // 判断返回值
            int ok = uploadMsg.getOk();
            if (ok == 0) {
                // 创建任务成功
                task_id = uploadMsg.getData();
            } else {
                // 创建任务失败-服务端异常

                jsonObject.put("success",false);
                return jsonObject;
            }
        } catch (LfasrException e) {
            // 上传异常,解析异常描述信息
            Message uploadMsg = JSON.parseObject(e.getMessage(), Message.class);

            jsonObject.put("success",false);
            return jsonObject;
        }

        // 循环等待音频处理结果
        while (true) {
            try {
                // 睡眠1min。另外一个方案是让用户尝试多次获取,第一次假设等1分钟,获取成功后break;失败的话增加到2分钟再获取,获取成功后break;再失败的话加到4分钟;8分钟;……
                Thread.sleep(sleepSecond * 1000);
            } catch (InterruptedException e) {
            }
            try {
                // 获取处理进度
                Message progressMsg = lc.lfasrGetProgress(task_id);

                // 如果返回状态不等于0,则任务失败
                if (progressMsg.getOk() != 0) {
                    // 服务端处理异常-服务端内部有重试机制(不排查极端无法恢复的任务)
                    // 客户端可根据实际情况选择:
                    // 1. 客户端循环重试获取进度
                    // 2. 退出程序,反馈问题
                    break;
                } else {
                    ProgressStatus progressStatus = JSON.parseObject(progressMsg.getData(), ProgressStatus.class);
                    if (progressStatus.getStatus() == 9) {
                        // 处理完成
                        break;
                    } else {
                        // 未处理完成
                        break;
                    }
                }
            } catch (LfasrException e) {
                // 获取进度异常处理,根据返回信息排查问题后,再次进行获取
                Message progressMsg = JSON.parseObject(e.getMessage(), Message.class);
                break;
            }
        }

        // 获取任务结果
        try {
            Message resultMsg = lc.lfasrGetResult(task_id);
            System.out.println(resultMsg.getData());
            // 如果返回状态等于0,则任务处理成功
            if (resultMsg.getOk() == 0) {
                // 打印转写结果
                System.out.println(resultMsg.getData());

                JSONObject temp= JSONObject.fromObject(JSONArray.fromObject(resultMsg.getData()).get(0));
                jsonObject.put("success",true);
                jsonObject.put("content",temp.getString("onebest"));
            } else {
                // 转写失败,根据失败信息进行处理

                jsonObject.put("success",false);
                return jsonObject;
            }
        } catch (LfasrException e) {
            // 获取结果异常处理,解析异常描述信息
            Message resultMsg = JSON.parseObject(e.getMessage(), Message.class);

            jsonObject.put("success",false);
            return jsonObject;
        }


        return jsonObject;
    }

这些都是常规代码,值得注意的是讯飞接口的初始化,必须导入配置文件!!配置文件路径根据自己实际情况来,javaweb项目默认是web-inf/classes,所以我直接在classes下新建来两配置文件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值