当前位置:   article > 正文

微信小程序--------语音识别(前端自己也能玩)

前端 小程序科大讯飞语音听写16k 16bit

一、背景

作为一名前端同学有时候感觉挺可怜的,复杂的操作都依赖后端同学在服务器端完成。那么,有一天我们自己想玩一个新技术或者后端同学不搭理我们,怎么办?绝望中.....

二、小程序语音识别

 接到这个需求,我们明确两个问题:
  1. 小程序录音支持什么格式

由小程序文档可知:只支持 mp3格式和 aac格式
微信小程序录音文档
clipboard.png

  1. 科大讯飞平台需要什么格式的音频
    支持的格式 pacm或者wav, speex和 speex-web 格式
    科大讯飞语音听写api

clipboard.png

3. 目标 将小程序的录音转为 科大讯飞能识别的音频格式

  1. import Mp3 from '@/utils/js-mp3/decode'
  2. import { md5 } from '@/utils/md5.js'
  3. import pcm from 'pcm-util'
  4. 录音
  5. // 获取录音权限
  6. this.getRecordAuth()
  7. // 获取录音对象
  8. const that = this;
  9. this.recorderManager = wx.getRecorderManager()
  10. this.recorderManager.onStart(() => {
  11. console.log('recorder start')
  12. })
  13. // 录音的格式参数
  14. const options = {
  15. duration: 11000,
  16. sampleRate: 32000,
  17. numberOfChannels: 1,
  18. encodeBitRate: 64000,
  19. format: 'mp3',
  20. frameSize: 6
  21. }
  22. this.recorderManager.start(options)
  23. this.recorderManager.onStop(res => {
  24. const tempFilePath = res.tempFilePath
  25. that.duration = res.duration
  26. const fs = wx.getFileSystemManager()
  27. console.log('record stop')
  28. console.log(res)
  29. // 从临时文件中读取音频
  30. fs.readFile({
  31. filePath: tempFilePath,
  32. success (res) {
  33. console.log('read success')
  34. that.mp3ToPcm(res.data)
  35. },
  36. fail (e) {
  37. console.log('read fail')
  38. console.log(e)
  39. }
  40. })
  41. })
  42. 转格式
  43. mp3ToPcm (mp3AB) {
  44. var that = this
  45. var decoder = Mp3.newDecoder(mp3AB)
  46. var pcmArrayBuffer = decoder.decode()
  47. // 和录音的格式一样
  48. const fromFormat = {
  49. channels: 1,
  50. sampleRate: 32000,
  51. interleaved: true,
  52. float: false,
  53. samplesPerFrame: 1152,
  54. signed: true
  55. }
  56. // 目标音频的格式
  57. const toFormat = {
  58. channels: 1,
  59. sampleRate: 16000,
  60. bitDepth: 8,
  61. interleaved: true,
  62. float: false,
  63. samplesPerFrame: 576,
  64. signed: true
  65. }
  66. var pcmAB = pcm.convert(pcmArrayBuffer, fromFormat, toFormat)
  67. const base64 = wx.arrayBufferToBase64(pcmAB)
  68. var millTime = (new Date().setMilliseconds(0) / 1000) + ''
  69. /** 调用科大讯飞平台的语音识别
  70. 请求参数都是自己申请应用的参数
  71. */
  72. wx.request({
  73. url: 'http://api.xfyun.cn/v1/service/v1/iat',
  74. method: 'POST',
  75. data: {
  76. audio: base64
  77. },
  78. header: {
  79. 'X-Appid': '5be4162d',
  80. 'X-CurTime': millTime,
  81. 'X-Param': 'eyJlbmdpbmVfdHlwZSI6ICJzbXMxNmsiLCJhdWUiOiAicmF3In0=',
  82. 'X-CheckSum': md5('b243cb9e1ea9d9eb40847967a8ebeef2' + millTime + 'eyJlbmdpbmVfdHlwZSI6ICJzbXMxNmsiLCJhdWUiOiAicmF3In0='),
  83. 'content-type': 'application/x-www-form-urlencoded' // 默认值
  84. },
  85. success (res) {
  86. console.log('turn success')
  87. console.log(res)
  88. console.log(res.data)
  89. },
  90. fail: function (res) {
  91. console.log('turn fail')
  92. console.log(res)
  93. }
  94. })
  95. }
  96. },

注意:

  1. 首先在科大讯飞平台申应用申请应用
  2. 请求参数的文档语音识别的接口文档
  3. 录音一定在真机上测试,模拟器不行

js-mp3
pcm工具包

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/77582
推荐阅读
相关标签
  

闽ICP备14008679号