基于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 中{},[]中括号,大括号使用详解
May 12 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
基于JQuery的一句话搞定手风琴菜单
Sep 14 Javascript
js/html光标定位的实现代码
Sep 23 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
火狐下input焦点无法重复获取问题的解决方法
Jun 16 Javascript
javascript模拟post提交隐藏地址栏的参数
Sep 03 Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 Javascript
Vue中render函数的使用方法
Jan 31 Javascript
node使用request请求的方法
Dec 20 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 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中用foreach来操作数组的代码
2011/07/17 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php blowfish加密解密算法
2016/07/02 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python中MySQLdb模块用法实例
2014/11/10 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python3中的json模块使用详解
2018/05/05 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python 可视化神器Plotly详解
2020/12/26 Python
numba提升python运行速度的实例方法
2021/01/25 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
幼儿园园长岗位职责
2013/11/26 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
说明书范文
2014/05/07 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
生产实习心得体会范文
2016/01/22 职场文书