基于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实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
Jun 09 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
Javascript 读取操作Sql中的Xml字段
Oct 09 Javascript
javascript实现链接单选效果的方法
May 13 Javascript
JavaScript中几种排序算法的简单实现
Jul 29 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
基于Vue中点击组件外关闭组件的实现方法
Mar 06 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 Javascript
JS实现多选框的操作
Jun 24 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
简单易用的计数器(数据库)
2006/10/09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php addslashes 函数详细分析说明
2009/06/23 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python遍历numpy数组的实例
2018/04/04 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
Python补齐字符串长度的实例
2018/11/15 Python
Python数据存储之 h5py详解
2019/12/26 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python虚拟环境venv用法详解
2020/05/25 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
技术学校毕业生求职信分享
2013/12/02 职场文书
供货协议书
2014/04/22 职场文书
师德师风建设方案
2014/05/08 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
学生会个人总结范文
2015/02/15 职场文书
如何使用pdb进行Python调试
2021/06/30 Python