java利用科大讯飞SDK实现语音转文字的功能 您所在的位置:网站首页 科大讯飞语音转文字设备 java利用科大讯飞SDK实现语音转文字的功能

java利用科大讯飞SDK实现语音转文字的功能

2023-09-20 13:49| 来源: 网络整理| 查看: 265

一,下载SDK,获取.pcm格式的语音文件

利用科大讯飞的SDK实现语音转文字的功能,首先可以登录科大讯飞的官网查看“语音听写Java SDK文档”语音听写 Java SDK 文档 | 讯飞开放平台文档中心 (xfyun.cn),下载Java SDK的链接是快速指引 | 讯飞开放平台文档中心 (xfyun.cn)需要先进行注册在下载SDK。语音听写下载图中的Java MSC

这里需要将服务接口认证信息保存在开始时需要使用

下载完sdk如图所示解压

 

 解压完成后,直接用idea打开

\Java_iat1021_03e05010\sample\MscDemo

打开项目后运行程序

运行程序的主要目的是录取一段PCM格式的录音,用于我们自己的项目。运行完的结果如下:

先设置保存音频的开关为开,然后点击“开始听写”,进行录音。这里是需要通过设备“前端点超时”和“后端点的超时”我的分别是5000,10000.这里设置他们,相当于是设置停顿时间,目的是在听写时根据停顿在转换为文字。在我们的程序中也要设置这两项,且要和这里设置的一样,不然会出现一次可以完全转换完,一次又出现未知错误的情况。如图所示:

前期准备工作完成,也有了PCM文件可以开始我们的代码开发了。

二、语音转文字的代码

创建项目,在项目的路径下,创建lib文件,将SDK中的json-jena-1.0.jar和Msc.jar贴过来。

 在项目路径下再将SDK中的以下4个文件也粘贴过来。

创建pom依赖

com.hp.hpl.jena json-jena 1.0 com.iflytek msc 1.0 system ${project.basedir}/lib/Msc.jar

 下面时具体的代码

package com.example.xhydome1.util.speechRecognition; import com.iflytek.cloud.speech.*; import org.apache.http.entity.ContentType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import java.io.*; public class IatTool { private static Logger LOGGER = LoggerFactory.getLogger(IatTool.class); private StringBuilder curRet; private SpeechRecognizer recognizer; private Object lock = new Object(); public IatTool(String appId){ LOGGER.info("------Speech Utility init iat------"); SpeechUtility.createUtility(SpeechConstant.APPID + "=" + appId); } public String RecognizePcmfileByte(MultipartFile audioFile) { curRet = new StringBuilder(); try { if (recognizer == null) { //以下设置转换参数 recognizer = SpeechRecognizer.createRecognizer(); recognizer.setParameter(SpeechConstant.AUDIO_SOURCE, "-1"); recognizer.setParameter( SpeechConstant.RESULT_TYPE, "plain" ); recognizer.setParameter(SpeechConstant.VAD_BOS,"5000");//前端点超时, recognizer.setParameter(SpeechConstant.VAD_EOS,"10000");//后端点超时要与运行SDK时配置的一样 } recognizer.startListening(recListener); byte[] buffer = audioFile.getBytes(); if (buffer == null || buffer.length == 0) { LOGGER.error("no audio avaible!"); recognizer.cancel(); } else { int lenRead = buffer.length; System.out.println("文件长度"+buffer.length); recognizer.writeAudio( buffer, 0, lenRead ); recognizer.stopListening(); synchronized (lock) { lock.wait();//主线程等待 } System.out.println(curRet.toString()); return curRet.toString(); } } catch (Exception e) { e.printStackTrace(); } return null; } private RecognizerListener recListener = new RecognizerListener() { @Override public void onBeginOfSpeech() { LOGGER.info( "onBeginOfSpeech enter" ); } @Override public void onEndOfSpeech() { LOGGER.info( "onEndOfSpeech enter" ); } /** * 获取听写结果 */ @Override public void onResult(RecognizerResult results, boolean islast) { LOGGER.info( "onResult enter" ); //可以用json解析器解析为json格式,,参考AsrSpeechView中inResult函数 String text = results.getResultString(); curRet.append(text); //System.out.println("解析结果"+curRet.toString()); if( islast ) { synchronized (lock) { lock.notify();//子线程唤醒 } } } @Override public void onVolumeChanged(int volume) { LOGGER.info( "onVolumeChanged volume=" + volume); } @Override public void onError(SpeechError error) { LOGGER.error( "onError enter" ); if (null != error) { LOGGER.error("onError Code:" + error.getErrorCode() + "," + error.getErrorDescription(true)); } } @Override public void onEvent(int eventType, int arg1, int agr2, String msg) { LOGGER.info( "onEvent enter" ); //以下代码用于调试,如果出现问题可以将sid提供给讯飞开发者,用于问题定位排查 /*if(eventType == SpeechEvent.EVENT_SESSION_ID) { DebugLog.Log("sid=="+msg); }*/ } }; public static void main(String args[]) throws IOException { IatTool iatTool=new IatTool("03e05010"); File file = new File("D://0_JAVA_program//xhydome1//xhydome1//iat_test.pcm"); FileInputStream fileInputStream = new FileInputStream(file); MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream); iatTool.RecognizePcmfileByte(multipartFile); } }

运行结果如下:

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有