基于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 相关文章推荐
JS 无限级 Select效果实现代码(json格式)
Aug 30 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
ionic实现可滑动的tab选项卡切换效果
Apr 15 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
AngularJS中的promise用法分析
May 19 Javascript
React路由管理之React Router总结
May 10 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
Jun 24 Javascript
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
js验证账户名是否重复
2020/05/26 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python计算两个日期相差天数的方法示例
2017/05/23 Python
替换python字典中的key值方法
2018/07/06 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
python drf各类组件的用法和作用
2021/01/12 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
商务主管岗位职责
2013/12/08 职场文书
电视购物广告词
2014/03/19 职场文书
平安工地汇报材料
2014/08/19 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python