在 long long ago,需要做一个网页录音并上传的功能,网上千万般寻觅,看遍 flash 和 html5 实现,终于找到了一个很好的库。今天突然想起,谨以此记录,方便日后再用。

这个录音插件支持录音、停止、回放、上传等,基本一条龙。关于使用方法,插件的demo 和说明里面都已经很清楚。下面大概记录一下我的使用过程(时间太久远,有些实在记不清了)。。

写在开头的提醒:此插件支持大部分已实现 getUserMedia 的移动端、PC端浏览器。具体支持种类请看插件说明书。只支持 在https下。本地测试可不用https。

1 引入资源

我的项目中是 jquery 为基础,首先把库下载下来,然后引入即可。我引入了 recorder.wav.min 以及 waveview。

2 使用

1.打开录音

// 检测浏览器是否支持录音

if(!Recorder.Support()){

$.alert('当前浏览器不支持录音功能');

return;

}

// 打印录音相关信息方法

recInfo: function(info){

var self = this;

self.$recordStatus.html(info); // $recordStatus: 全局声明的录音状态 dom

},

// 打开录音

openRecord: function(){

var self = this;

rec = Recorder({

type:'wav'

,bitRate:16

,sampleRate:16000

,onProcess:function(buffers,level,time,sampleRate){

wave.input(buffers[buffers.length-1],level,sampleRate); // 录音波形显示初始化

}

});

rec.open(function(){

self.recInfo("已打开录音");

wave = Recorder.WaveView({elem:".recwave"}); // .recwave: 录音波形容器

self.openSuccess = true; // 录音是否开启成功

},function(e,isUserNotAllow){

self.recInfo((isUserNotAllow?"用户不允许使用麦克风":"")+"打开录音失败:"+e);

self.openSuccess = false;

});

},

2.开始录音

startRecord: function($target){

var self = this;

if(self.isRecording){

$.alert('当前正在录音!');

return;

}

if(!self.openSuccess){

$.alert('打开录音失败!');

return;

}

if(rec){

rec.start();

$target.find('.recPlay').attr('src', ''); // 此处 src 是录音音频 src

self.recordTime = 0;

$target.find('.record-time').html(self.formateTime(self.recordTime)); // 初始化计时显示

ecordTimer = setInterval(function(){

self.recordTime ++;

$target.find('.record-time').html(self.formateTime(self.recordTime)); // 计时

}, 1000);

self.recInfo("录音中");

self.isRecording = true; // 记录是否正在录音

};

},

3.暂停、继续录音

pauseRecord: function(){

if(rec){

rec.pause();

console.log("已暂停");

};

},

resumeRecord: function(){

if(rec){

rec.resume();

console.log("继续录音中...");

};

},

4.停止录音

stopRecord: function($target){

var self = this;

if(rec){

// console.log("正在编码"+rec.set.type+"...");

var t1 = Date.now();

rec.stop(function(blob,time){

self.recblob = { // 录音文件对象

blob: blob,

set: $.extend({},rec.set),

time: time

};

var blob = self.recblob.blob;

// console.log(blob)

self.recInfo('录音成功');

},function(s){

self.recInfo("录音失败:"+s);

});

clearInterval(recordTimer); // 停止录音计时

self.isRecording = false;

};

},

5.试听录音

playRecord: function($target, key){

var self = this;

var o = self.recblob;

if(self.isRecording){

$.alert('请先停止录音再试听!');

return;

}

if(o){

$target.find('.recPlay').removeClass('none');

var audio = $($target.find(".recPlay"))[0];

if(!(audio.ended || audio.paused)){

audio.pause();

};

var end = function(blob){

audio.src = URL.createObjectURL(blob); // 将录音文件转成可播放的音频 src

audio.play();

};

var wav = Recorder[o.set.type+"2wav"];

if(wav){

console.log("正在转码成wav...");

wav(o.blob, function(blob){

end(blob);

console.log("已转码成wav播放");

}, function(msg){

console.log("转码成wav失败:"+msg);

});

}else{

end(o.blob);

};

};

},

6.关闭录音

closeRecord: function(){

var self = this;

if(rec){

rec.close(function(){

self.recInfo("已关闭录音");

clearInterval(recordTimer);

self.isRecording = false;

});

}

},

7.将录音保存到服务器

saveRecord: function($target, $this, $recordBtn){

var self = this,

url = "xxx", // 音频要上传到的服务器地址

blob = self.recblob.blob,

fileExt = blob.type.split('/')[1],

formData = new FormData(),

// data = {

// ext: fileExt

// };

// 重点

formData.append('file', blob);

formData.append('type', blob.type);

formData.append('size', blob.size);

$.ajax({

'type': 'POST',

'url': url,

'data': formData,

'contentType': false,

'async': false,

'processData':false,

'dataType': 'json',

success: function(res){

// 进行将文件存到存储服务器之后的操作

},

error: function(){

// 上传错误的操作

}

})

},

ex:格式化时间方法

addZero: function(number){

if(number < 10)

return "0" + number;

else

return number;

},

formateTime: function(count){

var self = this,

h = Math.floor(count / 3600),

m = Math.floor(count / 60) % 60,

s = Math.floor(count % 60);

h = self.addZero(h);

m = self.addZero(m);

s = self.addZero(s);

return h + ":" + m + ":" + s;

},

哒哒哒,网页录音插件基本完成使用。页面上只需要录音相关操作的按钮,如果需要波形的话,放一个波形容器。我的按钮有 打开录音、开始录音、停止、播放、关闭录音。(波形样式的相关代码找不到了。。。。)

h5 如何录音保存上传_html5 网页录音、试听以及上传相关推荐

  1. android webview 多文件上传,Android网页WebView图片文件上传的问题

    Android网页WebView图片文件上传的问题 发布时间:2020-07-13 22:48:15 来源:51CTO 阅读:5922 作者:拾荒者老大 在安卓下,webview上传图片点击是没用的, ...

  2. java html5 上传_HTML5结合ajax实现文件上传以及进度显示

    基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活, 本来打算使用jquery插件进行异步文件上传,比如uploadfy但是需要额外的支持,也有人用iframe模仿异步上传机制 ...

  3. 把网页放到云服务器上,怎么把网页放到云服务器上

    怎么把网页放到云服务器上 内容精选 换一换 Linux操作系统云服务器的安全组出方向已按照元数据获取的前提条件进行配置,但是无法通过169.254.169.254获取元数据.在配置了静态IP的Linu ...

  4. 服务器上怎么做网页啊,云服务器上怎么做网页

    云服务器上怎么做网页 内容精选 换一换 企业主机安全(Host Security Service,HSS)是提升服务器整体安全性的服务,通过主机管理.风险防御.入侵检测.安全运营.网页防篡改功能,可全 ...

  5. 如何在把网页放到服务器上,怎么把网页放到云服务器上

    怎么把网页放到云服务器上 内容精选 换一换 安全组类似防火墙功能,是一个逻辑上的分组,用于设置网络访问控制.用户可以在安全组中定义各种访问规则,当云耀云服务器加入该安全组后,即受到这些访问规则的保护. ...

  6. 如何将写好的网页放在服务器上,怎么把网页放在云服务器上

    怎么把网页放在云服务器上 内容精选 换一换 用户的弹性云服务器已绑定EIP,但是无法连接到Internet.弹性云服务器通过EIP访问Internet的流程如图1所示:本问题请按照以下思路进行排查处理 ...

  7. java canvas添加图片上传_HTML5 canvas画图及图片上传服务器

    上一个教程中我们实现了使用html5 canvas来制作涂鸦画板的效果,在这个教程中,我们将讲解如何将画好的图片上传到服务器上. 最后的效果如下图,当点击"开始画图"按钮,将在ca ...

  8. java代码上传exel,excle上传服务器并解析!求excel上传到服务器的java代码

    如何将数据上传给服务器 医嘱以形式发送过来? 办法有很多,最简单的,就是在机器里,建立2个数据库A,B,假如A是外务器. 在数据库中,以A数据库做发布,让B数据库订阅,弄好以后,A数据库的数据就会自动 ...

  9. java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

    [注意] [前言] 肯定有需求要网页录音,并且要上传.这奇葩需求. 然后找到了FlashWavRecorder, [原始版本号] 1.下载 在上面的地址下载zip解压之后,目录里面有个index.ht ...

  10. 移动端网页录音上传,服务端智能语音识别

    移动端网页录音上传,服务端智能语音识别 最近,看了创业时代的魔镜,想法突如起来,能不能手机发送一条语音,语音上传到后台,自动识别语音的信息,转化为文字,将文字分析,然后回复用户艳学网的资源. 我们的资 ...

最新文章

  1. 9点到17点半 cron_SpringQuartz定时任务的cron表达式书写
  2. 如何在自定义指令中获取评估属性
  3. 【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )
  4. 【渝粤题库】广东开放大学 文化投资与贸易 形成性考核
  5. 前端学习(2055)vuejs的认识和特点介绍
  6. linux删除文件_Linux删除文件夹用什么命令
  7. 这篇被引用近4k次的论文教你如何正确的理解和使用相关系数!
  8. java1.8 64位,jdk 1.8 64位 下载_jdk 1.8 64位 官方版_魅蓝下载
  9. 在html种颜色的代码,html颜色代码生成器
  10. 火狐的可配置信息(about:config)
  11. 以javaweb项目为例,用户在搜索网页域名的过程到网页响应到底经过了什么?
  12. 跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租...
  13. win10 电脑自带的便签在哪里
  14. 打印机 打印机驱动 打印机如何与PC通信 什么通信协议 蓝牙打印机项目 蓝牙协议栈
  15. Aspose.Cells使用教程:使用 .NET 在 Linux 上创建或编辑 Excel 文件
  16. html chm 64,Win7 64位下的CHM
  17. 子类调用父类构造器《转载》
  18. 星起航:如何筛选优质带货达人?
  19. 国足VS沙特荣誉之战—此战必胜
  20. 来自苹果的编程语言——Swift简介

热门文章

  1. spark3.0-spark入门-总结知识要点
  2. 黑苹果 声卡驱动 ID注入
  3. 对抗神经网络学习和实现(GAN)
  4. matlab绘制柱状图语句,matlab绘制柱状图
  5. TB6612FNG电机驱动模块使用说明
  6. 第七代i3核显linux驱动下载,i3-8100,装win7,集显uhd 630改版驱动完美安装
  7. 教室录播系统方案_录播教室技术解决方案
  8. TIA WinCC Professional入门经典(1) 组态第一个WinCC Professional项目
  9. Java中swing修改左上角的图标
  10. 服务器搭建说明以及接口调用文档