微信小程序实现语音识别功能的过程中爬了很多坑

2021-04-19
来源:网络整理

在使用微信小程序实现语音识别功能的过程中,我爬了很多坑。主要原因是微信小程序发展太快,互联网上的信息无法跟上。一些旧的信息使自己走错了路。 ,希望后面的朋友不会绕路,所以请与大家分享。

关于语音识别的总体想法

看照片加深记忆力

语音转换

为什么要进行语音转换?简而言之,它是微信小程序录制文件的格式,主要的语音转换API不支持该格式,并且不进行转换就不会使用它。

微信小程序从基本库1. 6. 0开始。建议使用wx。()方法进行记录。录制文件的格式可以自己指定。有两种格式:aac和mp3。

因为我以前没有学习过音频转换,所以我在微信小程序中搜索了有关语音转换的相关信息。这时候,坑被挖了,我跳了进去。

上的大多数信息都说,微信小程序的记录文件是变体的丝绸文件(也许以前的小程序确实是这样的),需要进行特殊处理,然后再使用Silk-v3或转码。扔了之后,我发现它仍然不起作用微信小程序用什么语音开发,在坑里徘徊了很长时间。

最后,发现转移确实是一个无意识的操作。双击后可以正常打开我一直用于录制文件的mp3格式,并播放声音。这到底是什么?你没有变体吗?好吧,你实际上是一个普通的“人”。

微信小程序用什么语言来开发_微信小程序 实时语音_微信小程序用什么语音开发

一切都清楚了,微信小程序可能已经对该区域进行了优化,以减少复杂的处理,因此,一切顺利之后,其余的操作就很简单了。

微信小程序代码

/** 录音开始 */ function speechStart(e,that) { const recorderManager = wx.getRecorderManager(); const options = { duration: 10000, sampleRate: 16000, numberOfChannels: 1, encodeBitRate: 64000, format: 'mp3', frameSize: 50 } recorderManager.start(options); }

/** 语音识别 */ function speechRecognition (that,res) { console.log("语音识别"); wx.uploadFile({ url: API_URL, filePath: res.tempFilePath, name: 'file', formData: { 'user': 'test' }, success: function (res) { console.log(res); console.log(res.data); }, fail:function(){ console.log("语音识别失败"); } }) }

后端服务器Java实现

com.baidu.aip java-sdk 4.1.0

// 设置APPID/AK/SK,注册百度语音识别API即可获取 public static final String APP_ID = "******"; public static final String API_KEY = "******"; public static final String SECRET_KEY = "******"; /** * @Description TODO * @return * @author liuyang * @blog http://www.pqsky.me * @date 2018年1月27日 */ @RequestMapping(value = "/speechRecognition") public Object speechReco(HttpServletRequest request) { MultipartFile file = ((MultipartHttpServletRequest) request).getFile("file"); try { byte[] pcmBytes = mp3Convertpcm(file.getInputStream()); JSONObject resultJson = speechBdApi(pcmBytes); System.out.println(resultJson.toString()); if (null != resultJson && resultJson.getInt("err_no") == 0) { return resultJson.getJSONArray("result").get(0).toString().split(",")[0]; } } catch (Exception e) { e.printStackTrace(); } return ""; } /** * @Description MP3转换pcm * @param mp3Stream * 原始文件流 * @return 转换后的二进制 * @throws Exception * @author liuyang * @blog http://www.pqsky.me * @date 2018年1月30日 */ public byte[] mp3Convertpcm(InputStream mp3Stream) throws Exception { // 原MP3文件转AudioInputStream AudioInputStream mp3audioStream = AudioSystem.getAudioInputStream(mp3Stream); // 将AudioInputStream MP3文件 转换为PCM AudioInputStream AudioInputStream pcmaudioStream = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, mp3audioStream); byte[] pcmBytes = IOUtils.toByteArray(pcmaudioStream); pcmaudioStream.close(); mp3audioStream.close(); return pcmBytes; } /** * @Description 调用百度语音识别API * @param pcmBytes * @return * @author liuyang * @blog http://www.pqsky.me * @date 2018年1月30日 */ public static JSONObject speechBdApi(byte[] pcmBytes) { // 初始化一个AipSpeech AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 调用接口 JSONObject res = client.asr(pcmBytes, "pcm", 16000, null); return res; }

摘要

以上代码用作测试用例,以帮助阐明总体思路并实现简单的调用。更详细的设计需要与特定业务结合。我希望它可以帮助看到它的人。

分享