基于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 相关文章推荐
UserData用法总结 lanyu出品
Jul 01 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
Sep 15 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
React Native中NavigatorIOS组件的简单使用详解
Jan 27 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
Sep 15 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 Javascript
vue实现公共方法抽离
Jul 31 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使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
CI框架常用方法小结
2016/05/17 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
python基础知识小结之集合
2015/11/25 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python如何实现int函数的方法示例
2018/02/19 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
python实现经典排序算法的示例代码
2021/02/07 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
个人自我鉴定写法
2013/11/30 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书