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

页面效果图:

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

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

代码:
创建内部 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();
},
相关推荐
码农学院10 小时前
微信小程序云开发实战:扫码点餐系统的高并发订单处理与外卖接单架构
微信小程序·架构·notepad++
这是个栗子1 天前
uni-app 微信小程序开发:常用函数总结(一)
微信小程序·小程序·uni-app·getcurrentpages
爱勇宝2 天前
上线 20 多天后,我才发现小程序的图片上传一直不可用
微信小程序·智能小程序
万亿少女的梦1683 天前
基于微信小程序、Spring Boot与Vue3的智慧养老管理系统设计与实现
spring boot·redis·微信小程序·mybatis·vue3
alxraves4 天前
零代码AI助手:用大模型自动生成微信小程序界面与逻辑
人工智能·微信小程序·notepad++
秃头披风侠_郑4 天前
【uniapp】一文让你学会微信小程序+APP+H5全平台实战指南
前端·微信小程序·uni-app
爱勇宝5 天前
一个家庭成长小程序的 MVP 复盘:看到用户在用我很欣慰
微信小程序·产品·设计
这是个栗子6 天前
uni-app微信小程序开发:高频核心 API(三)
微信小程序·小程序·uni-app
quweiie6 天前
thinkphp8结合jwt与微信小程序接口鉴权
微信小程序·小程序·thinkphp接口·接口鉴权
didiplus8 天前
我在GitHub刷到一个诗词API,顺手写了款小程序
微信小程序