基于JS实现web端录音与播放功能


Posted in Javascript onApril 17, 2019

纯js实现web端录音功能,功能并不是特别多,逐步增加中,详细地址:github。

getUserMedia在非localhost和127的情况下,需要开启https,由于腾讯云的没备案,demo就不放了,可以自行获取代码并启动测试。

实现方式

实现原理的话,主要是以下三点,

  • 利用webrtc的getUserMedia方法获取设备音频输入,使用audioprocess得到音频流(pcm流,范围-1到1)。
  • 转码,利用前端中的ArrayBuffer等二进制操作按采样位数处理流信息。
  • 使用decodeAudioData转码arraybuffer到audioBuffer并播放(小文件,大文件使用audio)。

使用方式

script方式

直接引入dist下的recorder.js即可

let recorder = new Recorder();

npm方式

安装:

npm i js-audio-recorder

调用:

import Recorder from 'js-audio-recorder';
let recorder = new Recorder();

API

基本方法

// 开始录音
recorder.start();
// 暂停录音
recorder.pause();
// 继续录音
recorder.resume()
// 结束录音
recorder.stop();
// 录音播放
recorder.play();
// 销毁录音实例,释放资源,fn为回调函数,
recorder.destroy(fn);
recorder = null;
下载功能
// 下载pcm文件
recorder.downloadPCM();
// 下载wav文件
recorder.downloadWAV();
// 重命名pcm文件,wav也支持
recorder.downloadPCM('重命名');
获取录音时长
// 回调持续输出时长
recorder.onprocess = function(duration) {
  console.log(duration);
}
// 手动获取录音时长
console.log(recorder.duration);

默认配置

sampleBits,采样位数,默认是16
sampleRate,采样频率,浏览器默认的,我的chrome是48000
numChannels,声道数,默认是1

传入参数

new Recorder时支持传入参数,

{
  sampleBits: 16,     // 采样位数,范围8或16
  sampleRate: 16000,   // 采样率,范围11025、16000、22050、24000、44100、48000
  numChannels: 1,     // 声道,范围1或2
}

注意

使用127.0.0.1或localhost尝试,因为getUserMedia在高版本的chrome下需要使用https。

兼容性

主要是以下几个方面:

Web Audio Api

https://caniuse.com/#search=w...

getUserMedia

https://caniuse.com/#search=g...

Typed Arrays

https://caniuse.com/#search=t...

欢迎访问和查看:recorder。

总结

以上所述是小编给大家介绍的基于JS实现web端录音与播放功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
Jul 26 Javascript
事件绑定之小测试  onclick && addEventListener
Jul 31 Javascript
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
node.js实现BigPipe详解
Dec 05 Javascript
通过javascript进行UTF-8编码的实现方法
Jun 27 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
关于vue-resource报错450的解决方案
Jul 24 Javascript
基于javascript的拖拽类封装详解
Apr 19 Javascript
简单了解JavaScript异步
May 23 Javascript
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
Apr 17 #Javascript
vue component 中引入less文件报错 Module build failed
Apr 17 #Javascript
Vue项目路由刷新的实现代码
Apr 17 #Javascript
vue cli 3.x 项目部署到 github pages的方法
Apr 17 #Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 #Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
Apr 16 #Javascript
vue微信分享的实现(在当前页面分享其他页面)
Apr 16 #Javascript
You might like
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
php提取微信账单的有效信息
2018/10/01 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
js常用DOM方法详解
2017/02/04 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
大学生村官任职感言
2014/01/09 职场文书
九年级科学教学反思
2014/01/29 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
综合素质评价自我评价
2015/03/06 职场文书
2016年母亲节寄语
2015/12/04 职场文书
导游词之岳阳楼
2019/09/25 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python