当前位置: 首页 > news >正文

前端Vue使用js-audio-plugin实现录音功能

在前端 Vue 项目中使用 js-audio-recorder 组件,可按以下流程进行操作:

  1. 安装组件:在项目根目录下执行npm i js-audio-recorder命令,安装该组件。
  2. 引入组件:在需要使用录音功能的 Vue 组件中,通过import Recorder from 'js - audio - recorder'引入 Recorder。
  3. 初始化与使用:在组件的created钩子函数或setup函数中初始化 Recorder 实例,并定义相关方法来控制录音操作。

具体使用方法如下:

  • 创建实例:可在created中创建 Recorder 实例,如this.recorder = new Recorder()。也可传入参数自定义采样位数、采样率等,如this.recorder = new Recorder({sampleBits: 16, sampleRate: 16000, numChannels: 1})
  • 开始录音:先通过Recorder.getPermission()获取麦克风权限,成功后调用start方法,如Recorder.getPermission().then(() => {this.recorder.start()})
  • 控制录音:暂停录音调用pause方法,即this.recorder.pause();继续录音调用resume方法,即this.recorder.resume();停止录音调用stop方法,即this.recorder.stop()
  • 播放录音:调用play方法播放录制的音频,如this.recorder.play()
  • 销毁实例:录音结束后,可调用destroy方法销毁实例,释放资源,如this.recorder.destroy()
  • 获取音频数据:可通过getWAVBlob方法获取录制音频的 WAV 格式 Blob 数据,如const blob = this.recorder.getWAVBlob(),用于上传或其他操作。\

示例:

<template> <div> <h1>音频录制示例</h1> <button @click="startRecording" :disabled="isRecording">开始录音</button> <button @click="pauseRecording" :disabled="!isRecording || isPaused">暂停录音</button> <button @click="resumeRecording" :disabled="!isRecording ||!isPaused">继续录音</button> <button @click="stopRecording" :disabled="!isRecording">停止录音</button> <button @click="playRecording" :disabled="!recordingBlob">播放录音</button> <button @click="downloadRecording" :disabled="!recordingBlob">下载录音</button> </div> </template> <script setup> import Recorder from 'js - audio - recorder'; import { ref } from 'vue'; // 录音状态 const isRecording = ref(false); // 暂停状态 const isPaused = ref(false); // 存储录制的音频Blob const recordingBlob = ref(null); let recorder; const startRecording = async () => { try { await Recorder.getPermission(); recorder = new Recorder(); recorder.start(); isRecording.value = true; isPaused.value = false; } catch (error) { console.error('获取权限或开始录音失败', error); } }; const pauseRecording = () => { if (recorder) { recorder.pause(); isPaused.value = true; } }; const resumeRecording = () => { if (recorder) { recorder.resume(); isPaused.value = false; } }; const stopRecording = () => { if (recorder) { recorder.stop(); isRecording.value = false; isPaused.value = false; recordingBlob.value = recorder.getWAVBlob(); recorder.destroy(); } }; const playRecording = () => { if (recordingBlob.value) { const audioUrl = URL.createObjectURL(recordingBlob.value); const audio = new Audio(audioUrl); audio.play(); } }; const downloadRecording = () => { if (recordingBlob.value) { const link = document.createElement('a'); link.href = URL.createObjectURL(recordingBlob.value); link.download ='recording.wav'; link.click(); } }; </script> <style scoped> button { margin: 10px; } </style>
http://www.cnnetsun.cn/news/136942.html

相关文章:

  • 测试用例之翻页功能详解
  • 音乐平台歌曲盗版维权全攻略:权利卫士录屏取证+可信时间戳认证实操指南
  • 根据您提供的 package.json 片段,涉及的 @vue/cli-plugin-babel 和 @vue/cli-service 版本为 ~4.2.0。以下是针对该版本的详细解决方案,结合相关依
  • electron-egg打包win7
  • 8种网络故障分析及测试命令大全
  • 新人必看盘点知名CTF练习靶场,从零基础入门到精通,收藏这一篇就够了!
  • Pythonselenium自动化测试实战项目
  • 关于Comtos Linux (朱雀)主体源码的选择
  • 超级Mini小车功能说明
  • STC32G12单片机替换成STC32F12单片机,直接替换的结果
  • SIEMENS 6SL3210-1PE33-0CL0 变频器
  • 软件测试常用的7种方法,最后一个是升职加薪关键!(零基础小白转行IT互联网高效进阶)
  • 【RTOS】EasyLog的移植与使用
  • 在数据库里玩“平行宇宙”:MatrixOne Data Branch 让数据也拥有Git 的分支/合并/对比/回滚(含跨集群同步)
  • 基于单片机的全自动洗衣机系统的设计
  • 5.6 模型部署与智能体集成实战
  • 基于单片机的球赛计分牌的设计
  • ArcGIS Pro 从入门到实战基础篇(10):地图菜单
  • Kotaemon与Redis/Memcached集成:构建高速缓存层
  • 【鸿蒙三方库编译】lycium_plusplus(lycium++)高效完成鸿蒙C/C++编译
  • 2025年度GEO服务商权威甄选指南:技术深度与商业价值的双重考量
  • 收藏备用!Java程序员转AI大模型:从技术沉淀到AI爆发的进阶之路
  • Python 爬虫实战:Session 会话维持爬取需登录内容
  • 基于移相全桥变换器的电池充电仿真模型,采用电压电流双闭环PI控制。 电池先经历CC模式而后进入...
  • 基于COMSOL模拟的水力压裂技术研究:固体力学与达西定理的应用
  • Redis 性能调优(二)
  • Doris 性能调优实践指南(可直接落地)
  • presum|二分try+滑窗cnt
  • Web自动化测试:Unittest单元测试框架
  • Apache2最佳实践