• Java中实现在线语音识别(科大讯飞免费的SKD)、SDK下载和IDEA项目搭建、成功运行【完整代码】


    一、下载语音听写(流式版)SDK

    科大讯飞官网:https://www.xfyun.cn/

    1.1 实名认证

    首先登陆讯飞开放平台:https://passport.xfyun.cn/login,微信扫码关注登录
    在这里插入图片描述

    注册新账号

    在这里插入图片描述

    登陆后界面后,进入产品服务–>实时语音转写栏目

    在这里插入图片描述
    在这里插入图片描述

    点击个人免费套餐,下面的立即领取,它会提醒我们去实名认证

    在这里插入图片描述

    实名认证一下

    在这里插入图片描述
    提交完认证之后

    在这里插入图片描述

    可以看到认证成功

    在这里插入图片描述
    回到平台领取界面,就可以领取了

    在这里插入图片描述

    1.2 创建应用并试用免费购买版

    点击右边的+号创建应用,很简单的,然后才能提交(不然会提示你还没有创建应用,不让提交)

    在这里插入图片描述

    确认下单

    在这里插入图片描述

    在这里插入图片描述

    设置下支付密码

    在这里插入图片描述

    确认支付就好了

    在这里插入图片描述

    在这里插入图片描述

    1.3 下载SDK

    在控制台进入后有如下界面,点击语音听写,往下翻就可以找到Java MSC,点击下载就好了

    红色箭头指向的是我们上一步创建的的项目名称

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    解压后目录如下:

    在这里插入图片描述

    1.4 一般我们使用SDK调用方式的话,只需要用到APPID。

    在本地IDEA项目中使用的话,使用的是自己项目中下载的SDK包,和自己官网的Appid。否则SDK包和Appid不对应的话会报错

    在这里插入图片描述

    二、使用IDEA建立项目并实现【一定要使用自己官网的SDK和Appid对应,否则会出错10407

    2.1 在IDEA中新建Maven项目

    在这里插入图片描述

    在这里插入图片描述

    2.2 在java下新建com.zhj.voice包,写入VoiceSpeech类,导入MSC的jar包

    VoiceSpeech类完整代码如下:【注意导入的各个包名】

    package com.zhj.voice;
    
    /**
     * Topic
     * Description
     *
     * @author zhouh
     * @version 1.0
     * Create by 2022/8/3 10:58
     */
    import java.awt.Button;
    
    import java.awt.Font;
    
    import java.awt.Frame;
    
    import java.awt.GridLayout;
    
    import java.awt.Panel;
    
    import java.awt.TextArea;
    
    import java.awt.event.ActionEvent;
    
    import java.awt.event.ActionListener;
    
    import java.lang.reflect.Parameter;
    
    import java.util.ArrayList;
    
    import javax.swing.ImageIcon;
    
    import javax.swing.JFrame;
    
    import javax.swing.JLabel;
    
    import com.iflytek.cloud.speech.RecognizerListener;
    
    import com.iflytek.cloud.speech.RecognizerResult;
    
    import com.iflytek.cloud.speech.SpeechError;
    
    import com.iflytek.cloud.speech.SpeechRecognizer;
    
    import com.iflytek.cloud.speech.SpeechUtility;
    
    import com.iflytek.util.DebugLog;
    
    import com.iflytek.util.JsonParser;
    
    import com.iflytek.util.Version;
    
    public class VoiceSpeech extends Frame implements ActionListener {
    
        Button startBtn;
    
        Button stopBtn;
    
        TextArea textArea;
    
    // 语音听写对象
    
        SpeechRecognizer speechRecognize;
    
        private static final String DEF_FONT_NAME = "宋体";
    
        private static final int DEF_FONT_STYLE = Font.BOLD;
    
        private static final int DEF_FONT_SIZE = 30;
    
        private static final int TEXT_COUNT = 100;
    
        public VoiceSpeech() {
    
    // 初始化听写对象
    
            speechRecognize = SpeechRecognizer.createRecognizer();
    
    // 设置组件
    
            startBtn = new Button("start");
    
            stopBtn = new Button("stop");
    
            textArea = new TextArea();
    
            Panel btnPanel = new Panel();
    
            Panel textPanel = new Panel();
    
    // Button startBtn = new Button("开始");
    
    //添加监听器
    
            startBtn.addActionListener(this);
    
            stopBtn.addActionListener(this);
    
            btnPanel.add(startBtn);
    
            btnPanel.add(stopBtn);
    
            textPanel.add(textArea);
    
            add(btnPanel);
    
            add(textPanel);
    
    // 设置窗体
    
            setLayout(new GridLayout(2, 1));
    
            setSize(400, 300);
    
            setTitle("语音识别");
    
            setLocation(200, 200);
    
            setVisible(true);
    
        }
    
        public void actionPerformed(ActionEvent e) {
    
            if (e.getSource() == startBtn) {
    
                textArea.setText("*************你说的是:");
    
                if (!speechRecognize.isListening())
    
                    speechRecognize.startListening(recognizerListener);
    
                else
    
                    speechRecognize.stopListening();
    
            } else if (e.getSource() == stopBtn) {
    
                speechRecognize.stopListening();
    
            }
    
        }
    
        /**
    
         * 听写监听器
    
         */
    
        private RecognizerListener recognizerListener = new RecognizerListener() {
    
            public void onBeginOfSpeech() {
    
    // DebugLog.Log( "onBeginOfSpeech enter" );
    
    // ((JLabel) jbtnRecognizer.getComponent(0)).setText("听写中...");
    
    // jbtnRecognizer.setEnabled(false);
    
            }
    
            public void onEndOfSpeech() {
    
                DebugLog.Log("onEndOfSpeech enter");
    
            }
    
            /**
    
             * 获取听写结果. 获取RecognizerResult类型的识别结果,并对结果进行累加,显示到Area里
    
             */
    
            public void onResult(RecognizerResult results, boolean islast) {
    
                DebugLog.Log("onResult enter");
    
    // 如果要解析json结果,请考本项目示例的 com.iflytek.util.JsonParser类
    
                String text =
    
                        JsonParser.parseIatResult(results.getResultString());
    
    //  String text = results.getResultString();
    
    //  JsonParser json = new JsonParser();
    
    //      String newTest = json.parseIatResult(text);
    
    //      textArea.setText(newTest);
    
                textArea.append(text);
    
                text = textArea.getText();
    
                if (null != text) {
    
                    int n = text.length() / TEXT_COUNT + 1;
    
                    int fontSize = Math.max(10, DEF_FONT_SIZE - 2 * n);
    
                    DebugLog.Log("onResult new font size=" + fontSize);
    
                    int style = n > 1 ? Font.PLAIN : DEF_FONT_SIZE;
    
                    Font newFont = new Font(DEF_FONT_NAME, style, fontSize);
    
                    textArea.setFont(newFont);
    
                }
    
                if (islast) {
    
                    iatSpeechInitUI();
    
                }
    
            }
    
            public void onVolumeChanged(int volume) {
    
                DebugLog.Log("onVolumeChanged enter");
    
                if (volume == 0)
    
                    volume = 1;
    
                else if (volume >= 6)
    
                    volume = 6;
    
    // labelWav.setIcon(new ImageIcon("res/mic_0" + volume + ".png"));
    
            }
    
            public void onError(SpeechError error) {
    
                DebugLog.Log("onError enter");
    
                if (null != error) {
    
                    DebugLog.Log("onError Code:" + error.getErrorCode());
    
                    textArea.setText(error.getErrorDescription(true));
    
                    iatSpeechInitUI();
    
                }
    
            }
    
            public void onEvent(int eventType, int arg1, int agr2, String msg) {
    
                DebugLog.Log("onEvent enter");
    
            }
    
        };
    
        /**
    
         * 听写结束,恢复初始状态
    
         */
    
        public void iatSpeechInitUI() {
    
    // labelWav.setIcon(new ImageIcon("res/mic_01.png"));
    
    // jbtnRecognizer.setEnabled(true);
    
    // ((JLabel) jbtnRecognizer.getComponent(0)).setText("开始听写");
    
        }
    
        public static void main(String[] args) {
    
    // 初始化
    
            StringBuffer param = new StringBuffer();
    
            param.append( "appid=" + Version.getAppid() );
    
    //  param.append( ","+SpeechConstant.LIB_NAME_32+"=myMscName" );
    
            SpeechUtility.createUtility( param.toString() );
    
            VoiceSpeech t = new VoiceSpeech();
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293

    接着可能会有包名爆红,提醒我们导入Jar包

    我们找到1.3中下载好的SDK文件夹下,进入下面的lib–>lib目录下,找到两个jar包。【注意,Java_iat1021_a8641a01 (1)是我下载的SDK解压后的名字】

    在这里插入图片描述

    然后将两个jar包导入到项目中:

    在这里插入图片描述

    在这里插入图片描述

    点击ok发现com.iflytek.cloud.speech相关的不爆红了

    在这里插入图片描述

    但是com.iflytek.util相关的import仍然会爆红,所以我这里下一步是选择在com目录下手动新建iflytek.util包【使其能够手动导入】

    2.3 手动新建iflytek.util包,复制导入文件

    但是com.iflytek.util相关的import仍然会爆红,所以我这里是选择在com目录下手动新建iflytek.util包【使其能够手动导入】

    之后找到1.2步下载解压后的SDK文件夹中的sample

    在这里插入图片描述
    跟着目录找到sample–>src–>com–>iflytek–>util下的6个类

    在这里插入图片描述
    全选,复制粘贴到我们本地IDEA的对应包com.iflytek.util下

    (这里包下Version类名中显示蓝色,是因为我已经上传到github上并且本地IDEA修改代码了,所以会显示蓝色)

    在这里插入图片描述
    这时候会发现不报错了,所有的import都正常显示了

    在这里插入图片描述

    2.4 修改com.iflytek.util.Version类中的getAppid方法返回值,为自己的Appid

    修改com.iflytek.util.Version类中的getAppid方法返回值为我们科大讯飞官网中项目的Appid,因为返回String类型,记得Appid加双引号:

    "自己的Appid号"
    
    • 1

    在这里插入图片描述

    Appid号在1.4节的时候得到了:

    在这里插入图片描述

    2.5 复制我们SDK中的.so和.dll文件一共4个到项目根目录下

    在本地下载解压好的SDK问价夹中找到lib–>lib包下的这4个文件,Ctrl+A后,Ctrl+C全选复制

    在这里插入图片描述
    然后粘贴到本地IDEA的项目根目录下就好了

    在这里插入图片描述

    完整工程目录如下:

    在这里插入图片描述

    至此,项目搭建就完成了。

    三、启动项目

    进入VoiceSpeech类中运行main函数就可以成功启动项目且不报错了:

    Voice

    运行后会弹出弹框,点击start说话就可以识别到了。

    在这里插入图片描述

    识别后想要再次说话识别,点击stop后再点击start就可以了

    四、常见报错

    参考:在Java中实现在线语音识别

    Idea导入jar包的两种方法

  • 相关阅读:
    windows 上的C语言 图形界面设计函数 ( easyx 插件 )
    经验分享:以国家新型基础测绘建设试点检验大势智慧技术能力
    UWB 定位技术方案选择
    LeetCode--152. 乘积最大子数组(C++描述)
    大数据学长面试京东面试题
    在普通频道输入字符串如果是pi,则给出信息~!
    Nginx监控模块
    PHP毕业设计源代码高校兼职应聘招聘系统-前台Uniapp
    springcloud 整合gateway 网关
    深度解读汽车域控制器
  • 原文地址:https://blog.csdn.net/m0_46378271/article/details/126134293