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

本作者源代码链接: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会卡壳开发者们。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352