基于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 相关文章推荐
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
文本框input聚焦失焦样式实现代码
Oct 12 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 Javascript
ReactNative踩坑之配置调试端口的解决方法
Jul 28 Javascript
Vuex提升学习篇
Jan 11 Javascript
详解express + mock让前后台并行开发
Jun 06 Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
JavaScript监听一个DOM元素大小变化
Apr 26 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
javascript编写简易计算器
2017/05/06 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue组件name的作用小结
2018/05/23 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Django中的Signal代码详解
2018/02/05 Python
python3安装speech语音模块的方法
2018/12/24 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
HTML5标签小集
2011/08/02 HTML / CSS
总经理司机岗位职责
2014/02/06 职场文书
动物科学专业求职信
2014/07/27 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
Windows server 2012搭建FTP服务器
2022/04/29 Servers