【百度语音识别】JavaAPI方式语音识别示例 MP3转PCM文件Java实现

2024-05-19 02:18

本文主要是介绍【百度语音识别】JavaAPI方式语音识别示例 MP3转PCM文件Java实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


【百度语音识别】JavaAPI方式语音识别示例MP3转PCM

  • Java-API合成语音示例:http://ai.baidu.com/forum/topic/show/496727
  • REST-API文档地址:http://ai.baidu.com/docs#/TTS-API/top
  • 注意:需要下载MP3插件jar。才可以进行MP3CONVERTPCM 链接: https://pan.baidu.com/s/1i5pJxpb 密码: 8w4x
  • 遇到的坑:HTTPUtil工具类中。不需要拼接access_token参数。大家注意一下。ContentType也改一下。

----------------------------------开始代码示例----------------------------------

  • MP3转PCM的方法 需要下载注意的jar才可以正确转换哦

第一步就是语音合成的MP3文件转换PCM格式文件

package com.xs.audio.tns;import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
/*** MP3转PCM Java方式实现* @author 小帅丶* @date 2017年12月6日*/
public class MP3ConvertPCM {/*** MP3转换PCM文件方法* @param mp3filepath 原始文件路径* @param pcmfilepath 转换文件的保存路径* @throws Exception */public static void mp3Convertpcm(String mp3filepath,String pcmfilepath) throws Exception{File mp3 = new File(mp3filepath);File pcm = new File(pcmfilepath);//原MP3文件转AudioInputStreamAudioInputStream mp3audioStream = AudioSystem.getAudioInputStream(mp3);//将AudioInputStream MP3文件 转换为PCM AudioInputStreamAudioInputStream pcmaudioStream = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, mp3audioStream);//准备转换的流输出到OutputStreamOutputStream os = new FileOutputStream(pcm);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead=pcmaudioStream.read(buffer, 0, 8192))!=-1) {os.write(buffer, 0, bytesRead);}os.close();pcmaudioStream.close();}
}
  • HttpUtil工具类新增加一个postASR的方法

/*** 获取语音识别内容* @param requestUrl* @param params* @return* @throws Exception*/public static String postASR(String requestUrl, String params) throws Exception {System.out.println(params);String generalUrl = requestUrl;//这里不需要对接口地址拼接access_token参数 切记!!!System.out.println("发送的连接为:"+generalUrl);URL url = new URL(generalUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();System.out.println("打开链接,开始发送请求"+new Date().getTime()/1000);connection.setRequestMethod("POST");// 设置通用的请求属性connection.setRequestProperty("Content-Type", "application/json");connection.setRequestProperty("Connection", "Keep-Alive");connection.setUseCaches(false);connection.setDoOutput(true);connection.setDoInput(true);// 得到请求的输出流对象DataOutputStream out = new DataOutputStream(connection.getOutputStream());out.writeBytes(params);out.flush();out.close();// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> headers = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : headers.keySet()) {System.out.println(key + "--->" + headers.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = null;if (requestUrl.contains("nlp"))in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));elsein = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String result = "";String getLine;while ((getLine = in.readLine()) != null) {result += getLine;}in.close();System.out.println("请求结束"+new Date().getTime()/1000);System.out.println("result:" + result);return result;}
  • 下面就是语音识别的示例代码哦

package com.xs.audio.tns;import java.io.File;
import java.util.HashMap;import com.xs.util.baidu.Base64Util;
import com.xs.util.baidu.FileUtil;
import com.xs.util.baidu.HttpUtil;
import com.xs.util.baidu.RandomStringGenerator;
/*** 语音识别Java-API JSON上传方式示例代码* @author 小帅丶**/
public class Audio2Text {//接口地址private static final String AUDIO2TEXT_URL = "http://vop.baidu.com/server_api";public static void main(String[] args) throws Exception {//合成的MP3语音文件String path = "C:/Users/Administrator/text2audio/VOICE1512521962.mp3";//MP3转pcm要保存的路径和文件名String path2 = "C:/Users/Administrator/text2audio/VOICE1512521962.pcm";MP3ConvertPCM.mp3Convertpcm(path, path2);// 对语音二进制数据进行识别   byte[] data = FileUtil.readFileByBytes(path2);    //readFileByBytes仅为获取二进制数据示例String speech = Base64Util.encode(data);File file = new File(path2);long len = file.length();String result = Audio2text("pcm", 16000,RandomStringGenerator.getRandomStringByLength(60),"自己获取的AccessToken", speech, len);System.out.println(result);}/*** JSON方式上传* @param format	必填	语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件* @param rate	必填	采样率, 8000 或者 16000, 推荐 16000 采用率* @param channel	必填	声道数,仅支持单声道,请填写固定值 1* @param cuid	必填	用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。* @param token	必填	开放平台获取到的access_token, 见上面的“鉴权认证机制”段落* @param lan	选填	语种选择,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写* @param url	选填	可下载的语音下载地址,与callback连一起使用,确保百度服务器可以访问。* @param callback	选填	用户服务器的识别结果回调地址,确保百度服务器可以访问* @param speech	选填	本地语音文件的的二进制语音数据 ,需要进行base64 编码。与len参数连一起使用。* @param len	选填	本地语音文件的的字节数,单位字节*/public static String Audio2text(String format,Integer rate,String cuid,String token,String speech,long len) throws Exception{HashMap<String, Object> paramMap = new HashMap<String, Object>();paramMap.put("speech",speech);paramMap.put("format", format);paramMap.put("rate", rate);paramMap.put("channel",1);paramMap.put("cuid",cuid);paramMap.put("token", token);paramMap.put("len", len);net.sf.json.JSONObject params = net.sf.json.JSONObject.fromObject(paramMap);String data = HttpUtil.postASR(AUDIO2TEXT_URL,params.toString());System.out.println("语音文件识别的内容:"+data);return data;}
}

看看返回的内容

{"corpus_no": "6496262443167631439", "err_msg": "success.", "err_no": 0, "result": ["开发者小帅你好,"], "sn": "74778487111512528965"
}

以上就是语音识别Java-API调用示例代码哦。难点是MP3转PCM会卡壳开发者们。


这篇关于【百度语音识别】JavaAPI方式语音识别示例 MP3转PCM文件Java实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995757

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法