年前做了一期语音口令的年度活动,从语音录制、上传到智能检测,以及后续的语音播放组件,语音录制的实现的方式是基于微信的JSSDK,本篇主要把语音录制板块整理了一下,供大家参考;

各位看官先上眼:

功能梳理:

视图层

定义动态效果状态标识

区分几种录制状态isAudioState: 0 // 0 未录制or检测完毕 1 录制中 2 检测中:未录制or检测完毕 / 0 无动效:录制中 / 1 波浪纹:检测中 / 2 环形检测

设置动态效果切换状态

通过监听touchstart/touchend事件去切换动态效果

逻辑层

录制、上传、检测功能

时间限制(时间区间)、内容为空的兼容处理

touchstart事件中做了哪些事

1.开启录音2.切换录音中状态3.开始计时,用于记录音频时长

touchend事件中做了哪些事

1.停止录音2.智能检测3.控制录音时长4.上传音频5.切换录音结束状态(是否开始检测)

USE API(JS-SDK)

开始录制 startRecord

停止录制 stopRecord

智能检测 translateVoice (将语音转文字)

上传音频 uploadVoice (将录制的临时音频文件上传至微信服务,供服务)

这里就不赘述了,可以去猫一眼微信的官方文档 点击前往

代码层:

注:所有逻辑均在此组件,父级组件引入即可

{{isAudioState === 0 ? '长按开始' : isAudioState === 1 ? '录制中...' : '识别中...'}}

let vm = null

import _wx from '../../../static/wx.js' // JS-SDK

require('es6-promise').polyfill()

export default {

data () {

return {

isAudioState: 0, // 0 未录制or检测完毕 1 录制中 2 检测中

secondNum: 0 // 音频时长

}

},

filters: {

},

created: function () {

vm = this

},

methods: {

audioStart (e) {

// 开始录制

e.preventDefault() // 解决touch时触发下拉 松开后无法touchend的情况

_wx.startRecord()

this.count_time()

this.isAudioState = 1

},

audioEnd () {

// 结束录制

vm.isAudioState = 0

clearInterval(this.setIvWrap)

vm.isAudioState = 2 // 方便本地观测 动态 测试通过后注释即可

var params = {

async success (res) {

this.limit_time() // 时间限制

vm.isAudioState = 2 // 实际检测动效

const testdata = await vm.check_text(res)

if (!testdata.translateResult) { // 未检测语音

console.log('人家没听明白你说啥,再读一下')

return

}

_wx.uploadVoice({

localId: res.localId,

isShowProgressTips: 0,

success (updata) {

console.log('上传成功')

}

})

}

}

_wx.stopRecord(params)

},

check_text (res) {

// 智能校验

return new Promise((resolve, reject) => {

_wx.translateVoice({

localId: res.localId,

isShowProgressTips: 0,

success (testdata) {

resolve(testdata)

}

})

})

},

count_time () {

// 计算音频时长

clearInterval(this.setIvWrap)

this.secondNum = 0

this.setIvWrap = setInterval(() => {

this.secondNum ++

if (this.secondNum >= 15) {

this.audioEnd()

}

}, 1000)

},

limit_time () {

// 音频时长限制

if (vm.secondNum >= 15 || vm.secondNum <= 3) {

console.log(vm.secondNum ? '最多录制15s' : '录制时长不得小于3s')

return

}

}

},

mounted () {

},

components: {

}

}

img{ pointer-events: none; } // 取消某些浏览器的默认事件

.audio-img{

width: 1.4rem;

height: 1.4rem;

margin: 0 auto;

position: relative;

img{

width: 100%;

height: 100%;

position: absolute;

left: 0;

top: 0;

z-index: 1;

}

.mark-image{

position: absolute;

left: 0;

top: 0;

width: 100%;height: 100%;

z-index: 1;

}

.wave-wrap{

position: absolute;

left: 0;

top: 0;

width: 100%;height: 100%;

z-index: 0;

.wave{

position: absolute;

left: 1%;

top: 1%;

width: 98%;

height: 98%;

border-radius: 50%;

z-index: 1;

}

.wave-1{

background: #d6382f;

animation: scale-wave1 2s linear infinite;

}

.wave-2{

background: #e37f6a;

animation: scale-wave2 2s linear infinite;

}

.wave-3{

background: #e37f6a;

animation: scale-wave2 2s 1s linear infinite;

}

}

.roate-wrap{

position: absolute;

left: -0.21rem;

top: -0.21rem;

width: 100%;

height: 100%;

padding: 0.25rem;

z-index: 0;

animation: roate-test 2s linear infinite;

-webkit-animation: roate-test 2s linear infinite;

}

}

.audio-text{

margin-top: 0.3rem;

color: #fff;

text-align: center;

}

@keyframes scale-wave1 {

0%{

opacity: 1;

transform: scale(1)

}

100%{

transform: scale(1.35);

opacity: 0;

}

}

@keyframes scale-wave2 {

0%{

opacity: 1;

transform: scale(1)

}

100%{

opacity: 0;

transform: scale(1.9)

}

}

@keyframes roate-test {

0%{

transform: rotate(0);

}

100%{

transform: rotate(360deg);

}

}

注意事项:

上述逻辑中均为同步操作,以应对服务端异步获取当次录音的音频文件(目的在于需确报本次音频上传成功后再与服务端交互);

微信音频格式为speex,需转格;

部分浏览器存在touch img呈现预览模式的解决方案,img{ pointer-events: none; };

audioStart时,部分浏览器存在用户同时触发下拉动作后松手无法touchend的情况,需preventDefault操作;

米8在触发上传、检测api时,会造成检测动画的卡顿,(其他机型没问题),初步怀疑是线程阻塞,有兴趣的可以一块研究一下,欢迎科普哈~

移动端语音html,掘金:H5实现移动端语音录制功能相关推荐

  1. uniApp 新闻详情页语音播报,百度语音合成app端、H5端语音播报实例

    非常轻便的语音合成接口,可以用于新闻详情页语音播报,实例功能: 点击"播放"按钮播放新闻详情页面的内容,播放按钮文字也图标变为"暂停",再点击重新播放. 实例用 ...

  2. 使用H5编写的语音视频通话界面(主要用于移动端)

    使用H5编写的语音视频通话界面,主要用于移动端 <!DOCTYPE html> <html lang="en"><head><meta n ...

  3. H5调用讯飞语音接口实现在线语音听写测评

    韩顺平老师是我的人生导师,所以,老规矩,先看效果,后讲解:下面是效果图(页面较大,分屏效果) 这是在线语音听写: 这是在线语音测评: 下面我们来看看具体的代码实现: 1.在讯飞语音平台注册,创建一个应 ...

  4. H5手机移动端WEB开发资源整合 常用的标签及注意事项

    meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  5. H5手机移动端开发常用资源整合

    在移动端开发中需要考虑的问题比较多,常见的资源以及移动端需要注意的地方整理出来了,这是篇转载的文章,写的比较全面,分享给大家. 头部meta基础知识介绍 H5页面窗口自动调整到设备宽度,并禁止用户缩放 ...

  6. h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题

    h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题 参考文章: (1)h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题 (2)https://www.cnblogs.com/bl ...

  7. 支付宝H5 与网页端支付开发

    在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...

  8. H5调用移动端手机摄像头

    H5调用移动端手机摄像头 capture表示,可以捕获到系统默认的设备,比如:camera照相机:camcorder摄像机:microphone录音.accept表示,直接打开系统文件目录. < ...

  9. H5手机移动端调起浏览器自带分享功能实例(QQ、UC浏览器微博、微信分享)

    H5手机移动端调起浏览器自带分享功能实例(QQ.UC浏览器微博.微信分享) 注:代码需要在服务器或测试服务器上方可看到效果 HTML: <span class="viewshare w ...

最新文章

  1. 使用示波器测量扬声器的阻抗实验数据
  2. jquery 插件
  3. 德赛西威与智驾科技MAXIEYE发布“九逵计划”,部署商用车自动驾驶技术及服务...
  4. Java JSON 之 Xml 转 JSON 字符串
  5. 【django】HttpRequest对象
  6. ansible roles和django项目的整合
  7. 可优比和aag哪个好_2020年儿童床品牌排行榜,如何购买婴儿床?(可优比/思多嘉儿Stokke/好孩子/葛莱Graco)...
  8. 模板使用自定义类型_自定义虚幻图表_拓展蓝图功能
  9. 【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
  10. 陈绪:7月24日阿里云上海峰会出品人
  11. 国内著名大师培训视频全集
  12. 网易云音乐的所有歌手列表
  13. c4d流体插件_C4D常用最火14款插件合集,总有一款你想要的!
  14. 2021年系统架构设计师考试上午真题与答案
  15. 聊聊Dotnetty
  16. KettleError connecting to database: (using class org.gjt.mm.mysql.Driver)Communications link failure
  17. A ArrayLink for JavaME
  18. 我的微信公众号开通了!
  19. 高中英语选修计算机,高中英语课堂
  20. turtle库使用——漫天繁星+万花筒绘制

热门文章

  1. 宜信珍惜初心,吸引坚持梦想的人才
  2. 阿里云短信服务+语音服务,java实现发送
  3. 鸿蒙OS系统内测版官方下载,快手鸿蒙os测试版下载-快手鸿蒙os系统开源概念版v8.0.1.16128 OS版-007游戏网...
  4. java-php-python-ssm诗词文化网站计算机毕业设计
  5. 汇接局、端局、关口局
  6. python连接fanuc机器人、fanuc机器人以太网通信、发那科机器人以太网通信 fanuc socket 、fanuc TCP协议 通信 fanuc机器人与PC通讯
  7. 织梦后台友情链接网站Logo图片路径变成flixnk和后台内容编辑器里行内样式变成stxyle...
  8. Listview.Subitem.BackColor.ForeColor改变字体颜色和背景
  9. python异步处理请求_Python 异步请求
  10. 【AI】人工智能导论 小白零基础入门学习