微信小程序录音、停止录音、上传录音、播放录音

页面效果图:

未录音的数据,点击开始录音,点击停止录音上传录音

已录音状态可以播放录音、重新录制功能

代码:
创建内部 audio 上下文 InnerAudioContext 对象
获取全局唯一的录音管理器 RecorderManager

复制代码
//  监听页面加载时,创建内部 audio 上下文 InnerAudioContext 对象
onLoad(options){
	const innerAudioContext = wx.createInnerAudioContext({
		useWebAudioImplement: false // 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项
    })
    // 获取全局唯一的录音管理器 RecorderManager
    const recorderManager = wx.getRecorderManager();
    this.setData({
        innerAudioContext:innerAudioContext,
        recorderManager,
    })
}

点击开始录音

复制代码
handleStart(){
	// 开始录音
    this.data.recorderManager.start({
    	format: 'wav', // 录音格式
    });
    this.setData({
        isAudio:true,
    })
},

点击停止录音

复制代码
handleStop(){
	// 监听录音结束事件
    this.data.recorderManager.onStop((res)=>{
        this.setData({
            isAudio:false,
            audioSrc:res.tempFilePath,  // 录音文件的临时路径
            duration:res.duration/1000  // duration 录音时长,单位ms,我需要的是s,做了处理
        });
        // 停止录音后,上传文件
        this.getUploadFile(res.tempFilePath)
    });
    // 停止录音
    this.data.recorderManager.stop()
},
// 停止录音后,上传文件
getUploadFile(file){
	wx.uploadFile({
		filePath: file,
        name: 'file',
        // 上传文件的接口地址
        url: `${app.globalData.baseUrl}/xxxx/uploadVoice`,
        formData: {
            'user': 'test',
            'file':'blob.ogg'
        },
        header: {
        	Authorization: `Bearer ${wx.getStorageSync('token')}`,
        },
        timeout: 0,
        success: (result) => {
            wx.showToast({
                title: '录音成功',
            })
            // 上传文件成功后,调用接口自动保存录音文件
            this.getUpload(result.data)
        },
        fail: (res) => {
            wx.showToast({
           		title: res.message,
            })
        },
        complete: (res) => {
            console.log(res,'《=====录音成功或失败都会调用');
        },
	})
},

监听录音结束事件返回的res

点击播放录音

复制代码
handlePlay(){
	// 录音文件地址
	this.data.innerAudioContext.src = this.data.item.audioUrl;
	// 播放录音
    this.data.innerAudioContext.play();
    this.setData({
        isPlay:true
    })
    // 监听音频自然播放至结束的事件,播放结束,停止播放
    this.data.innerAudioContext.onEnded(()=>{
        this.handleStopPlay()
    })
},
// 暂停播放
handleStopPlay(){
    this.setData({
        isPlay:false
    });
    this.data.innerAudioContext.stop();
},
相关推荐
爱勇宝1 天前
小红花成长更新了:孩子想要什么,也应该有机会自己说出来
微信小程序·产品·小程序·云开发
andrsted2 天前
企业培训时间难统一?练题簿让在线免费刷题与培训考核更好安排
学习·微信小程序·小程序·学习方法·刷题
拖孩2 天前
一个人 + AI 做的小程序,今天,正式回本了
前端·后端·微信小程序
李纲明2 天前
微信小程序 wx.uploadFile 上传失败:合法域名、临时路径与 HTTPS 证书排查
微信小程序·小程序·uploadfile·devdiy·上传失败
冬奇Lab2 天前
一天一个开源项目(第247篇):wxa-runner —— 让小程序在普通浏览器里用微信官方基础库跑起来,直接接 Playwright 做无头 E2E
微信小程序·开源
andrsted2 天前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
梅雅达编程笔记3 天前
Day 17 | uni-app 小程序:前端从零搭建
微信小程序·typescript·uni-app·vue3·pinia·前端开发·全栈
zhiboshequ4 天前
Ai音视频对话在微信小程序端的技术实现方案
人工智能·微信小程序·live-pusher·live-player·音视频对话
小蒜学长4 天前
基于过程性评价的ai助学平台(代码+数据库+LW)
java·spring boot·后端·微信小程序·过程性评价
鸿蒙开发5 天前
# 代码写完才发现不能上线:微信小程序开发前必须准备的 8 件事
微信小程序·产品经理