
本作者源代码链接: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;publicclassMP3ConvertPCM{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的方法
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;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);}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
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4363/viewspace-2818266/ ,如需转载,请注明出处,否则将追究法律责任。