移动端语音html,掘金:H5实现移动端语音录制功能
年前做了一期语音口令的年度活动,从语音录制、上传到智能检测,以及后续的语音播放组件,语音录制的实现的方式是基于微信的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 (将录制的临时音频文件上传至微信服务,供服务)
这里就不赘述了,可以去猫一眼微信的官方文档 点击前往
代码层:
注:所有逻辑均在此组件,父级组件引入即可
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实现移动端语音录制功能相关推荐
- uniApp 新闻详情页语音播报,百度语音合成app端、H5端语音播报实例
非常轻便的语音合成接口,可以用于新闻详情页语音播报,实例功能: 点击"播放"按钮播放新闻详情页面的内容,播放按钮文字也图标变为"暂停",再点击重新播放. 实例用 ...
- 使用H5编写的语音视频通话界面(主要用于移动端)
使用H5编写的语音视频通话界面,主要用于移动端 <!DOCTYPE html> <html lang="en"><head><meta n ...
- H5调用讯飞语音接口实现在线语音听写测评
韩顺平老师是我的人生导师,所以,老规矩,先看效果,后讲解:下面是效果图(页面较大,分屏效果) 这是在线语音听写: 这是在线语音测评: 下面我们来看看具体的代码实现: 1.在讯飞语音平台注册,创建一个应 ...
- H5手机移动端WEB开发资源整合 常用的标签及注意事项
meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...
- H5手机移动端开发常用资源整合
在移动端开发中需要考虑的问题比较多,常见的资源以及移动端需要注意的地方整理出来了,这是篇转载的文章,写的比较全面,分享给大家. 头部meta基础知识介绍 H5页面窗口自动调整到设备宽度,并禁止用户缩放 ...
- h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题
h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题 参考文章: (1)h5 解决ios端输入框失去焦点后页面不回弹或者底部留白问题 (2)https://www.cnblogs.com/bl ...
- 支付宝H5 与网页端支付开发
在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...
- H5调用移动端手机摄像头
H5调用移动端手机摄像头 capture表示,可以捕获到系统默认的设备,比如:camera照相机:camcorder摄像机:microphone录音.accept表示,直接打开系统文件目录. < ...
- H5手机移动端调起浏览器自带分享功能实例(QQ、UC浏览器微博、微信分享)
H5手机移动端调起浏览器自带分享功能实例(QQ.UC浏览器微博.微信分享) 注:代码需要在服务器或测试服务器上方可看到效果 HTML: <span class="viewshare w ...
最新文章
- 使用示波器测量扬声器的阻抗实验数据
- jquery 插件
- 德赛西威与智驾科技MAXIEYE发布“九逵计划”,部署商用车自动驾驶技术及服务...
- Java JSON 之 Xml 转 JSON 字符串
- 【django】HttpRequest对象
- ansible roles和django项目的整合
- 可优比和aag哪个好_2020年儿童床品牌排行榜,如何购买婴儿床?(可优比/思多嘉儿Stokke/好孩子/葛莱Graco)...
- 模板使用自定义类型_自定义虚幻图表_拓展蓝图功能
- 【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
- 陈绪:7月24日阿里云上海峰会出品人
- 国内著名大师培训视频全集
- 网易云音乐的所有歌手列表
- c4d流体插件_C4D常用最火14款插件合集,总有一款你想要的!
- 2021年系统架构设计师考试上午真题与答案
- 聊聊Dotnetty
- KettleError connecting to database: (using class org.gjt.mm.mysql.Driver)Communications link failure
- A ArrayLink for JavaME
- 我的微信公众号开通了!
- 高中英语选修计算机,高中英语课堂
- turtle库使用——漫天繁星+万花筒绘制
热门文章
- 宜信珍惜初心,吸引坚持梦想的人才
- 阿里云短信服务+语音服务,java实现发送
- 鸿蒙OS系统内测版官方下载,快手鸿蒙os测试版下载-快手鸿蒙os系统开源概念版v8.0.1.16128 OS版-007游戏网...
- java-php-python-ssm诗词文化网站计算机毕业设计
- 汇接局、端局、关口局
- python连接fanuc机器人、fanuc机器人以太网通信、发那科机器人以太网通信 fanuc socket 、fanuc TCP协议 通信 fanuc机器人与PC通讯
- 织梦后台友情链接网站Logo图片路径变成flixnk和后台内容编辑器里行内样式变成stxyle...
- Listview.Subitem.BackColor.ForeColor改变字体颜色和背景
- python异步处理请求_Python 异步请求
- 【AI】人工智能导论 小白零基础入门学习