微信h5录音,长按录音(wx.startRecord)

嗨嗨,好久不见,自从chatgpt爆火之后,愈发不想更新文章了,因为大部分问题都可以得到解答,但是今日无事,还是记录下自己最近做的一个事吧,vue2中的录音h5,一个小活动,长按录音,播放录音,监听录音播放完毕做一些处理,接下来看代码吧

效果图

在这里插入图片描述在这里插入图片描述

前置条件

老生常谈的去注册你要使用的api接口,注册所需参数后端提供,initWechat()可以在入口处调用

import wx from 'weixin-jsapi'
import { wechatConfig } from '@/api/index'const jsApiList = ['startRecord','stopRecord','onVoiceRecordEnd','playVoice','pauseVoice','stopVoice','onVoicePlayEnd','uploadVoice','downloadVoice','onMenuShareAppMessage','onMenuShareTimeline'
]export function initWechat() {wechatConfig({url: encodeURIComponent(location.href)}).then((res) => {if (res.code === 200) {// <!--通过config接口注入权限验证配置-->wx.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: res.data.appId, // 必填,公众号的唯一标识timestamp: res.data.timestamp, // 必填,生成签名的时间戳nonceStr: res.data.nonceStr, // 必填,生成签名的随机串signature: res.data.signature, // 必填,签名jsApiList: jsApiList, // 必填,需要使用的JS接口列表success: () => {}})}})
}

录音代码

长按录音,松开添加到录音列表,每段录音微信api最长支持60s

<div class="long-tap-btn" @touchstart="onStartRecording" @touchend="stopRecording"><img class="icon" @click.prevent><div v-show="isRecording" class="record"><div class="item item1" /><div class="item item2" /><div class="item item3" /><div class="item item4" /><div class="item item3" /><div class="item item2" /><div class="item item1" /><div class="time">{{ btnDuration }}s</div></div><span v-show="!isRecording" class="btn-txt">长按录制语音</span></div>
// 长按录音
onStartRecording(event) {event.preventDefault()clearTimeout(this.timeOutEvent)clearInterval(this.btnDurationTimer)this.btnDuration = 1// 手指按住500ms才算长按this.timeOutEvent = setTimeout(() => {this.timeOutEvent = 0this.isRecording = truethis.recordStartTime = new Date().getTime()wx.startRecord()// 监听录音结束事件 超过60s自动执行wx.onVoiceRecordEnd({complete: res => {clearTimeout(this.timeOutEvent)this.onRecorded(res.localId)this.timeOutEvent = 1}})// 为了添加具体录制多长时间,微信未提供根据localId获取时长,所以用定时器实现this.btnDurationTimer = setInterval(() => {this.btnDuration++if (this.btnDuration >= 60) clearInterval(this.btnDurationTimer)}, 1000)}, 500)return false
},
//停止录音
stopRecording() {clearTimeout(this.timeOutEvent)const { timeOutEvent } = thisthis.isRecording = falseclearInterval(this.btnDurationTimer)if (timeOutEvent === 0) {wx.stopRecord({success: res => {this.onRecorded(res.localId)}})}return false
},
// 录制结束逻辑处理
onRecorded(localId) {const { recordStartTime } = thisconst endTime = new Date().getTime()const arrItem = {localId,duration: (endTime - recordStartTime) / 1000}if (arrItem.duration < 1) {Toast('录制时间太短,请重新录制')return}if (arrItem.duration >= 60) {arrItem.duration = 60} else {arrItem.duration = Math.ceil(arrItem.duration)}// 后端需要的的是serverId,localId仅作为当前页面即时播放和转换serverIdwx.uploadVoice({localId,isShowProgressTips: 0,success: res => {arrItem.url = res.serverIdthis.voiceList.push(arrItem)}})this.isRecording = false
},

播放录音,暂停录音

// tips 离开页面或者删除时记得判断当前录音是否还在播放中 播放的话需要停止播放
// 播放录音onPlayVoice(item, index) {this.currentPlayLocalId = item.localIdif (index === this.currentPlay) {wx.pauseVoice({localId: item.localId})this.currentPlay = -1} else {wx.playVoice({localId: item.localId})this.currentPlay = indexwx.onVoicePlayEnd({success: () => {this.currentPlay = -1}})}},// 删除录音onDelVoice(index) {const { stepData, currentStep } = thisstepData[currentStep].voiceList.splice(index, 1)this.stopPlayHandle()},stopPlayHandle() {this.currentPlay = -1wx.stopVoice({localId: this.currentPlayLocalId})}

到这差不多就结束啦,在vue中使用微信jssdk还是有点坑的,不过按部就班的还是很简单的…

彩蛋

对接的时候遇到了在ios正常,但是在安卓会出现调用录音api时,签名失效,wx.config和其他的都是正常的,排查半天想起来之前做支付遇到过类似问题,在录音或者支付的时候,前置页面不能使用vue路由进行跳转,需要使用location.href进行跳转,下图是gpt的解释:
在这里插入图片描述

用到的动画 wifi播放和波浪录制动效

播放(wifi)
在这里插入图片描述
在这里插入图片描述
波浪

 .item {width: 8px;background-color: #fff;margin: 0 5px;border-radius: 10px;animation: volume 1s linear infinite;&.item1 {animation-delay: 0s;}&.item2 {animation-delay: 0.1s;}&.item3 {animation-delay: 0.2s;}&.item4 {animation-delay: 0.1s;}}@keyframes volume {0% {height: 20%;}25% {height: 45%;}50% {height: 65%;}75% {height: 45%;}100% {height: 20%;}
}

完结撒花🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/70722.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频技术开发周刊 | 290

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 TCSVT 2022 | 基于环路多帧预测的深度视频压缩 本文基于端到端深度视频压缩框架&#xff0c;提出了一种环路多帧预测模块&#xff08;in-loop frame prediction module&a…

【程序员如何买股票 一】 股票基础知识

这一系列的博客是源于《2019 时不我与》&#xff0c;为了契合2019年度计划对投资理财理论知识的学习而开展的。股票作为长期理财和主要收益来源&#xff08;股票&#xff0c;房产&#xff0c;长期持有债券&#xff09;的一种&#xff0c;知道怎么玩儿才能让财富增值。搜寻了很多…

从冬奥看中国科技(三):数字人的觉醒与进化

冬奥赛事已过半&#xff0c;我们的情绪也在酣畅淋漓的竞技中跌宕起伏。在谷爱凌自由式滑雪的比赛中&#xff0c;武大靖代表的短道速滑团体赛的金牌中激昂&#xff1b;也为年轻单板滑雪小将苏翊鸣的银牌成绩判罚不停争论&#xff0c;为顶级花滑运动员羽生结弦的冬奥成绩惋惜。 近…

Vue快速入门

文章目录 一、Vue概述1.1什么是vue1.2Vue的特点1.3Vue和其他框架 二、Vue实例选项和基础语法2.1Vue实例选项2.2第一个应用2.3Vue第一个数据处理应用2.4基础语法2.4.1插值表达式2.4.2指令&#xff1a;v-text/v-html2.4.3 v-once2.4.4v-show、v-if2.4.5v-bind2.4.6v-on2.4.7v-for…

浅聊自媒体热点文章的万能写法,肯定可以帮到你

随着闭幕式的结束&#xff0c;这届冬奥会也落下帷幕。 要说今年这届冬奥&#xff0c;最火的莫过于他们两个人——谷爱凌和羽生结弦。 一个阳光自信完美到让人感慨上帝到底为她关上了哪扇门&#xff0c;一个用生命挑战4A让大家看到了奥林匹克精神。 圈内自媒体都说&#xff1a;为…

集合框架最详细知识点含例题

# 集合框架 **集合**&#xff1a;把具有相同数据类型的一组变量&#xff0c;汇聚成一个整体&#xff0c;就被称之为集合。 **集合框架**&#xff1a;为了表示和操作集合而规定的一种统一标准的体系结构。最简单的集合如数组、队列和列表等。任何集合框架一般包含&#xff1a;对…

AI赋能花样滑冰,景联文科技提供3D数据标注业务

在本届北京冬奥会花样滑冰男子单人自由滑中&#xff0c;日本选手羽生结弦如约挑战公认难度极高花滑动作4A&#xff08;阿克塞尔4周跳&#xff09;&#xff0c;虽然结局有些遗憾&#xff0c;在落地时不慎摔倒&#xff0c;并未挑战成功&#xff0c;最终以排名第四的总成绩无缘领奖…

一文读懂MySQL常用语法

MySQL查询语句链接地址 MySQL是什么&#xff1f; 成为MySQL大神的基础~ 数据类型 数值&#xff1a;整数&#xff0c;浮点数(小数) 日期&#xff1a;年&#xff0c;年月日&#xff0c;时分秒&#xff0c;年月日时分秒 字符串&#xff1a;文本类型字符串&#xff0c;二进制类型…

冬奥幕后故事:从低碳火炬到AI裁判,十四年后中国科技再上场

北京冬奥会开幕后&#xff0c;一个段子在社交媒体上流传甚广&#xff1a;“夏奥开幕式和冬奥开幕式就差半年&#xff0c;这半年人类科技进步真大啊。” 冬奥季终于到来。 2月4日晚&#xff0c;北京冬奥会开幕式来到了万众瞩目的主火炬点燃时刻&#xff0c;两名运动员共同点燃…

python实现图片切九宫格拼图

上一篇文章写道照片切成正方形&#xff0c;这篇文章将介绍&#xff0c;正方形怎么切割成九宫格&#xff0c;自己实现的九宫格发朋友很炫的。 先上代码&#xff1a; # -*- coding: utf-8 -*-from PIL import Image import sys# 将图片填充为正方形 def fill_image(image):width…

python实现图片切正方形

想做个照片切规则的正方形用来做九宫图&#xff0c;一般真实照片都是长方形那种&#xff0c;我见过别人把找照片填充成正方形&#xff0c;然后九宫格实在是太丑了&#xff0c;我喜欢整张图全是照片的。 不多赘述&#xff0c;上代码&#xff1a; import os from random import…

python深度学习基于pytorch——tensor中逐元素计算addcdiv()、clamp()

对tensor中的元素按个计算操作&#xff0c;方法如下图所示&#xff1a; 主要就是tensor之间的运算&#xff0c;已经附加代码输出部分&#xff0c;很容易理解。 import torch #coco #逐元素操作 torch.manual_seed(0) t torch.randn(1, 3) print(t) #tensor([[ 1.5410, -0.293…

如何有效追热点打造爆款作品,教你快速创作

追热点是小编必备的使命&#xff0c;没有热点的文章&#xff0c;就像没有珍珠的奶茶&#xff01;没有灵魂&#xff01;“拆解、模仿、反馈、总结、反复”&#xff0c;是助我们在任何领域从菜鸟到高手的秘密武器。今天就给大家介绍一下&#xff0c;追热点有什么必备姿势&#xf…

java集合框架

java集合框架 集合&#xff1a;把具有相同数据类型的一组变量&#xff0c;汇聚成一个整体&#xff0c;就被称之为集合。 集合框架&#xff1a;为了表示和操作集合而规定的一种统一标准的体系结构。最简单的集合如数组、队列和列表等。任何集合框架一般包含&#xff1a;对外的…

python实现 pdf转png格式

转换的图片要实现给固定像素坐标生成RGB值&#xff0c;找了好几段代码只能转换不能进行第二步 不说了&#xff0c;发出来就是解决了&#xff0c;先上代码&#xff1a; #!/usr/bin/env python # -*- coding:utf-8 -*- # Time : 2022/6/27 14:45 # Author : coco # File : tes…

css3学习(01认知,选择器,样式)

文章目录 一 基础认知1.1 CSS的介绍1.2 CSS语法规则1.3 CSS引入方式1.4 CSS常见三种引入方式的特点区别&#xff08;书写位置、作用范围、使用场景&#xff09; 二 基础选择器2.1 标签选择器2.2 类选择器2.3 id选择器2.4 通配符选择器 三 字体和文本样式【1】字体样式3.1.1 字体…

【CSS】——cascading stylesheets层叠式样式表

目录 0、CSS介绍 1、CSS语句组成 2、CSS选择器的选择方式 1&#xff09;CSS选择器的方式和选择器大全&#xff1a; 2&#xff09;常见的三种方式&#xff1a; 3、添加CSS方式 1&#xff09;外部样式表 html调用css代码 css文件 html文件 展示 2&#xff09;内部样式表…

汇佳学校|肖紫兮:花滑冠军+学科全优,背后有何秘诀?

隋文静、韩聪、申雪、赵宏博、羽生结弦、庞清、佟健……一连串热门花滑运动员/教练的名字闪耀了北京2022冬奥会&#xff0c;也让这项兼具优美与力量的冰上运动项目在大众之间火爆起来。 在汇佳&#xff0c;就有一名这样的冰上花滑运动员&#xff1a;默默苦练9年时间&#xff0…

从撞“新秀墙”到带团队,XTransfer海归码农升级之路

近来&#xff0c;互联网大厂纷纷被爆裁员&#xff0c;有些公司整个部门都被裁掉&#xff0c;有的应届生刚办理入职就被裁。几年前毕业进大厂是年轻人的首选&#xff0c;而如今大厂光芒正在逐渐褪去。 刚毕业不久的年轻人&#xff0c;应该是什么状态&#xff1f;很多人懵懵懂懂&…

HTML常用标签-1

1、标题标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…