为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

webp

本作者源代码链接:my.oschina.net/xshuai/blog/1585505


【百度语音识别】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格式文件

packagecom.xs.audio.tns;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;importjavax.sound.sampled.AudioFormat;importjavax.sound.sampled.AudioInputStream;importjavax.sound.sampled.AudioSystem;/**

* MP3转PCM Java方式实现

* @author 小帅丶

* @date 2017年12月6日

*/publicclassMP3ConvertPCM{/**

* MP3转换PCM文件方法

* @param mp3filepath 原始文件路径

* @param pcmfilepath 转换文件的保存路径

* @throws Exception

*/publicstaticvoidmp3Convertpcm(String mp3filepath,String pcmfilepath)throwsException{Filemp3=newFile(mp3filepath);Filepcm=newFile(pcmfilepath);//原MP3文件转AudioInputStreamAudioInputStream mp3audioStream=AudioSystem.getAudioInputStream(mp3);//将AudioInputStream MP3文件 转换为PCM AudioInputStreamAudioInputStream pcmaudioStream=AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED,mp3audioStream);//准备转换的流输出到OutputStreamOutputStream os=newFileOutputStream(pcm);intbytesRead=0;byte[]buffer=newbyte[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

*/publicstaticStringpostASR(String requestUrl,Stringparams)throwsException{System.out.println(params);String generalUrl=requestUrl;//这里不需要对接口地址拼接access_token参数 切记!!!System.out.println("发送的连接为:"+generalUrl);URL url=newURL(generalUrl);// 打开和URL之间的连接HttpURLConnection connection=(HttpURLConnection)url.openConnection();System.out.println("打开链接,开始发送请求"+newDate().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);// 得到请求的输出流对象DataOutputStreamout=newDataOutputStream(connection.getOutputStream());out.writeBytes(params);out.flush();out.close();// 建立实际的连接connection.connect();// 获取所有响应头字段Map>headers=connection.getHeaderFields();// 遍历所有的响应头字段for(String key:headers.keySet()){System.out.println(key+"--->"+headers.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReaderin=null;if(requestUrl.contains("nlp"))in=newBufferedReader(newInputStreamReader(connection.getInputStream(),"GBK"));elsein=newBufferedReader(newInputStreamReader(connection.getInputStream(),"UTF-8"));String result="";String getLine;while((getLine=in.readLine())!=null){result+=getLine;}in.close();System.out.println("请求结束"+newDate().getTime()/1000);System.out.println("result:"+result);returnresult;}



下面就是语音识别的示例代码哦

packagecom.xs.audio.tns;importjava.io.File;importjava.util.HashMap;importcom.xs.util.baidu.Base64Util;importcom.xs.util.baidu.FileUtil;importcom.xs.util.baidu.HttpUtil;importcom.xs.util.baidu.RandomStringGenerator;/** * 语音识别Java-API JSON上传方式示例代码 *@author小帅丶 * */publicclassAudio2Text{//接口地址privatestaticfinalString AUDIO2TEXT_URL="http://vop.baidu.com/server_api";publicstaticvoidmain(String[]args)throwsException{//合成的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=newFile(path2);longlen=file.length();String result=Audio2text("pcm",16000,RandomStringGenerator.getRandomStringByLength(60),"自己获取的AccessToken",speech,len);System.out.println(result);}/** * JSON方式上传 *@paramformat必填语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件 *@paramrate必填采样率, 8000 或者 16000, 推荐 16000 采用率 *@paramchannel必填声道数,仅支持单声道,请填写固定值 1 *@paramcuid必填用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。 *@paramtoken必填开放平台获取到的access_token, 见上面的“鉴权认证机制”段落 *@paramlan选填语种选择,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写 *@paramurl选填可下载的语音下载地址,与callback连一起使用,确保百度服务器可以访问。 *@paramcallback选填用户服务器的识别结果回调地址,确保百度服务器可以访问 *@paramspeech选填本地语音文件的的二进制语音数据 ,需要进行base64 编码。与len参数连一起使用。 *@paramlen选填本地语音文件的的字节数,单位字节*/publicstaticStringAudio2text(String format,Integer rate,String cuid,String token,String speech,longlen)throwsException{HashMapparamMap=newHashMap();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);returndata;}}



看看返回的内容

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

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



作者:小帅丶简书
链接:https://www.jianshu.com/p/1b5131398687


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消