基于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下div 的resize事件示例代码
Mar 09 Javascript
JQuery中使用on方法绑定hover事件实例
Dec 09 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
requireJS使用指南
Apr 27 Javascript
js生成随机颜色方法代码分享(三种)
Dec 29 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
浅析Angular19 自定义表单控件
Jan 31 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 Javascript
layui树形菜单动态遍历的例子
Sep 23 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
echarts实现折线图的拖拽效果
Dec 19 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
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php实现天干地支计算器示例
2014/03/14 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
自己动手开发jQuery插件教程
2011/08/25 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
人事部专员岗位职责
2014/03/04 职场文书
项目合作意向书范本
2014/04/01 职场文书
环保项目建议书
2014/08/26 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
速龙x4-860k处理器相当于i几
2022/04/20 数码科技
Python first-order-model实现让照片动起来
2022/06/25 Python