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();

    }

}

接着可能会有包名爆红,提醒我们导入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号"

在这里插入图片描述

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包的两种方法

  • 23
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
科大讯飞是一家提供在线语音识别服务的公司。他们的语音识别引擎可以将语音转换为文本。根据引用的内容,识别后想要再次说话识别,可以点击停止按钮,然后再点击开始按钮。对于科大讯飞在线语音识别服务,可能会遇到一些常见的报错,比如引用提到的20021引擎错误以及10407问题,这些问题可能是由于引擎配置错误或者缺少相关文件导致的。关于科大讯飞语音识别的具体导入问题和解决办法,可以参考引用提到的博客。除了在线语音识别科大讯飞还在虚拟音色生成方面进行了一些工作。通过将不同说话人的语音联合训练语音合成模型,可以生成多种不同的音色效果。具体的生成过程使用了音色编码模块和流模型等技术,将音色表征与文本表征、韵律表征相结合来进行语音合成。此外,近年来还有一些关于语音合成通用框架的研究,比如VITS等,这些研究致力于提高语音合成的端到端建模效果以及韵律表征等方面的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java实现在线语音识别科大讯飞免费SKD)、SDK下载IDEA项目搭建成功运行完整代码】](https://blog.csdn.net/m0_46378271/article/details/126134293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [技术解读 | 科大讯飞语音技术最新进展之二:语音识别与语音合成](https://blog.csdn.net/AI_Platform/article/details/129753551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值