基于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 锚点跳转滚动条平滑滚动一句话代码
Apr 30 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
React组件refs的使用详解
Feb 09 Javascript
微信小程序实现无限滚动列表
May 29 Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
在js文件中引入(调用)另一个js文件的三种方法
Sep 11 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python logging添加filter教程
2019/12/24 Python
python基于event实现线程间通信控制
2020/01/13 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
python软件都是免费的吗
2020/06/18 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
C#面试题
2016/05/06 面试题
中层竞聘演讲稿
2014/01/09 职场文书
校庆标语集锦
2014/06/25 职场文书
村委会贫困证明范本
2014/09/17 职场文书
2014年信用社工作总结
2014/11/25 职场文书
事业单位个人总结
2015/02/12 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android