基于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 Flash/MP3/Video多媒体插件
Jan 18 Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
Jan 19 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
Aug 25 Javascript
详解vue中在父组件点击按钮触发子组件的事件
Nov 13 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命令行脚本单进程运行的方法
2014/04/15 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
在JavaScript中访问字符串的子串
2015/07/07 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python3基础之基本数据类型概述
2014/08/13 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python实现学生信息管理系统
2020/04/05 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
python list多级排序知识点总结
2019/10/23 Python
Python常用编译器原理及特点解析
2020/03/23 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
求职简历中个人的自我评价
2013/12/25 职场文书
心理健康教育心得体会
2013/12/29 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
法律专业自荐信
2014/06/03 职场文书
写给医院的感谢信
2015/01/22 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
导游词之南京夫子庙
2019/12/09 职场文书