h5 录音

得益于前辈的分享,做了一个h5录音的demo。效果图如下:

点击开始录音会先弹出确认框:

首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音:

点击发送 将录音内容发送到对话框中。点击即可播放。点击获取录音即可下载最后一次的音频:

播放下载都是围绕blob文件。播放就是让隐藏的audio标签的地址指向内存中的blob:

        this.play = function (audio,blob) {
            blob=blob||this.getBlob().blob;
            audio.src = URL.createObjectURL(blob);
        };  
createObjectURL 我们在用base64显示图片的时候也可以用到。
 img.src = URL.createObjectURL(blob);

这样比一长串的字符串好看很多。同理如果你想销毁该地址对应的数据而节省内存可以这样:

 URL.revokeObjectURL(img.src);

扯远了点。下载就是模拟a标签的点击。

   function downloadRecord(record){
              var save_link = document.createElementNS(‘http://www.w3.org/1999/xhtml‘, ‘a‘)
                save_link.href = URL.createObjectURL(record);
                var now=new Date;
                save_link.download = now.Format("yyyyMMddhhmmss");
                fake_click(save_link);
            }

            function fake_click(obj) {
            var ev = document.createEvent(‘MouseEvents‘);
            ev.initMouseEvent(‘click‘, true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            obj.dispatchEvent(ev);
            }

每次发送 ,其实是讲音频数据缓存下来,标记下id。下次点击的时候根据id获取缓存的数据,然后叫给audio元素播放:

var msg={};
            //发送音频片段
            var msgId=1;
            function send(){
                if(!recorder){
                    showError("请先录音");
                    return;
                }

               var data=recorder.getBlob();
               if(data.duration==0){
                     showError("请先录音");
                    return;
               }
                msg[msgId]=data;
                recorder.clear();
                console.log(data);
                var dur=data.duration/10;
                 var str="<div class=‘warper‘><div id="+msgId+" class=‘voiceItem‘>"+dur+"s</div></div>"
                $(".messages").append(str);
                msgId++;
            }

            $(document).on("click",".voiceItem",function(){
                var id=$(this)[0].id;
                var data=msg[id];
                playRecord(data.blob);
            })

内部是基于AudioContext实现:兼容性如下,基本上只能在谷歌和火狐浏览器里面玩。很可惜微信和ios目前不支持的。如果电脑没有音频驱动或者没有麦都会报错提示。

有兴趣的朋友可以玩玩。未来移动端支持就更好了。

源码:http://files.cnblogs.com/files/stoneniqiu/Voice.zip

参考博客:

http://blog.csdn.net/bzhou0125/article/details/46444201

http://www.zhangxinxu.com/wordpress/2017/06/html5-web-audio-api-js-ux-voice/

https://developer.mozilla.org/en-US/docs/Web/API/AudioContext

时间: 2024-10-27 05:46:20

h5 录音的相关文章

优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

目录 一.Recorder H5录音库的特性 (1)浏览器支持 (2)功能支持 二.使用预览截图 (1)移动端H5 (2)IOS Hybrid App (3)Android Hybrid App 三.应用场景 四.优化过程记录 (1)为什么要升级优化 (2)开始使用Web Worker加速转码 (3)剩下的问题 五.Hybrid App存在的意义 六.更多支持 Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化

H5录音音频可视化-实时波形频谱绘制、频率直方图

这段时间给GitHub Recorder开源库添加了两个新的音频可视化功能,比以前单一的动态波形显示丰富了好多(下图后两行是不是比第一行看起来丰满些):趁热打铁写了一个音频可视化相关扩展测试代码,下面这张就是测试Gif截图,看起来还算过得去,测试地址 上面这些波形.频率的计算和显示都是由纯js代码编写的,并未用到浏览器专有特性,因此可以方便的移植到其他语言实现,比如移植到Android.IOS原生实现. FrequencyHistogramView音频可视化频率直方图显示 此功能源码:frequ

HTML5网页录音和上传到服务器,支持PC、Android,支持IOS微信

准备做一个网页版聊天界面,表情啊.图片啊.上传文件啊都应该要有,视频就算了,语音还是要的. 本文记录的是在网页上用GitHub上的Recorder进行在线录音和上传到服务器. 录音代码 本示例代码支持PC.Android.IOS(仅Safari)中使用,如果用RecordApp可增加对IOS(微信浏览器.小程序)的支持. 看万遍代码不如行动一遍,新建一个html文件,把下面三段代码复制到文件内,双击浏览器打开就能进行测试. <!-- 先加载js录音库,注意:你应该把js clone到本地使用 -

基于recorder.js H5录音功能

兼容性 1.Chrome,FF,Edge,QQ,360(注:现有IE和Safari全版本不兼容) 2.其中Chrome47以上以及QQ浏览器强制要求HTTPS的支持 3.请尝试使用FF,Edge,360,浏览器进行体验,或将项目下载到本地通过localhost的方式 下载 recorder.js 前往 https://github.com/OmegaMibai/SoundRecording/tree/master/recorder/js 核心文件 核心代码 html <div id="ma

Hybrid小程序混合开发之路 - 数据交互

HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中混杂着HTML界面 记得xp时代的QQ,有些界面偶尔会弹出熟悉的js错误对话框,还能右键弹出熟悉的IE6的右键菜单,伪装的挺好,差点没认出来,现在的QQ就不知道了. 美团.淘宝这些拥有几乎无限界面的手机App,顶部进度条一亮,这是一个H5 没谁了! Electron!好嗨哟~ 数据交互 使用了HTM

干货:小微个人如何接入免费短信验证码

前几天专门为本文提前配了一段录屏,到 https://v.youku.com/v_show/id_XNDA0MTU0NzI4OA==.html 观看. 第一次用爱剪辑,老厉害了,时间轴都没有,所有涉及到精确时间只能靠猜,已卸载. 肤浅 说到发短信验证码接口,第一印象就是好货不便宜,速度快.送达率高的通道各大短信接口厂商收费也好贵的哟,小微个人不舍得接入,也不符合大部分大厂的准入门槛(大部分怎么也得不是个个人吧),还好有Bmob,5分价钱也适,我还是不舍得用(抠!). 想着自己几张手机卡面每月还有

H5进行录音,播放,上传

废话不说,直接上代码吧 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>火星黑洞</title> </head> <body> <div> <audio autoplay></a

iOS 实现长按录音上滑取消的几种思路

body { font-size: 13pt; color: #222; background: #fbfbfb; font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; line-height: 1.4; margin: 10% } h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111 } h1 { font-size: 3em; line-height: 1; ma

微信H5房卡9人牛牛青龙大厅开发页面按钮组设计总结

什么是按钮组? 顾名思义,按钮组就是指两个或两个以上的按钮排布在一起.为了了解按钮组的使用场景,首先我们来思考一个问题:什么时候我们会使用按钮组? 从按钮组的样式上我们可以看出常见的按钮组是供用户进行判断(两个选项)或者选择(两个以上选项)的. 判断 首先我们来说判断,就是只有两个按钮的情况.一般来说,两个按钮中肯定有一个拥有更高的优先级或者说用户更希望去点击,那么我们会在样式设计上进行区分. Image title 微信的"取消"按钮背景色选择的是灰色,而淘宝直接让"取消&