基于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 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
Oct 02 Javascript
整理Javascript事件响应学习笔记
Dec 02 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
ES6中的rest参数与扩展运算符详解
Jul 18 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 Javascript
微信小程序实现滚动加载更多的代码
Dec 06 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
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
Terran魔法科技
2020/03/14 星际争霸
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
javascript的BOM汇总
2015/07/16 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
为python设置socket代理的方法
2015/01/14 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python中JWT用户认证的实现
2020/05/18 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
大学生专科毕业生自我评价
2013/11/17 职场文书
军人违纪检讨书
2014/02/04 职场文书
保护母亲河倡议书
2014/04/14 职场文书
新闻发布会策划方案
2014/06/12 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android