昨天刚刚结束了谷歌师资培训。在准备的近三天中也学到很多东西。电子档的材料都上传到了git上,但是还有手写的技术实现不想拍照上传。所以还是写篇文章记录一下,也算是巩固了。就按照我讲的顺序来写。
先总体,再细节(我喜欢这种逻辑,更容易理解把握)。
1.总体部分[IatController.java]:
前端获取到录音文件并转为base64编码交给后端进行处理。IatController层把base64编码转换为text文本。再对得到的文本进行分词处理[findWithWordDivision()],获取到关键词并将关键词保存到sentenceList中,再将sentenceList放入data数据中进行数据库查询。
@PostMapping(value = "/searchBySdkBase", produces = "application/json;charset=UTF-8")
public Map searchBySdkBase(String base64){
Map map=new HashMap();
base64=base64.replace(" ","+");//用空格代替+
try {
String text = this.iatService.useIatSdkBase(base64);
List sentenceList=new ArrayList();
if(text.equals("") || text == null){
map.put("info","error");
return map;
}
sentenceList=this.sentenceService.findWithWordDivision(text);
if(sentenceList == null || sentenceList.size() == 0){
map.put("info","no sentence");
return map;
}
map.put("info","success");
map.put("data",sentenceList);
return map;
}
catch (Exception e){
e.printStackTrace();
return null;
}
}
2.细节实现:
(1)在UploadUtils.java文件中:
后端将得到的base64编码通过方法uploadFileBase()变成字节数组byte [] buffer,并写入随机生成的文件中(也就是recordPath:.wav/.mp3格式文件)。然后创建.pcm格式文件路径(只是创建路径。先建个房子,再把居民塞进去)。最后返回recordPath+pcmPath(接下来会用,需要注意)。
public static String uploadFileBase(String base64,String upload,String recordPath,String pcmPath){
String newFileName=UUID.randomUUID()+".wav";//避免重名:随机生成ID
byte [] buffer=Base64.decodeBase64(base64);
File file=new File(upload,newFileName);
FileOutputStream f