基于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 相关文章推荐
javascript下function声明一些小结
Dec 28 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
解析Javascript中难以理解的11个问题
Dec 09 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
jquery插件开发之实现md5插件
Mar 17 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
Javascript使用post方法提交数据实例
Aug 03 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
vue分页插件的使用方法
Dec 25 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 木马攻击防御技巧
2009/06/13 PHP
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
给ECShop添加最新评论
2015/01/07 PHP
PHP.vs.JAVA
2016/04/29 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
js格式化时间小结
2014/11/03 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python实现批量文件重命名
2019/10/31 Python
QML用PathView实现轮播图
2020/06/03 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
python 两种方法删除空文件夹
2020/09/29 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
四种会话跟踪技术
2015/05/20 面试题
体育之星事迹材料
2014/05/11 职场文书
英语专业自荐书
2014/06/13 职场文书
评先进个人材料
2014/12/29 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫