• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > html5实现手机触摸出现录音以及离开停止录音并上传的功能(代码)

html5实现手机触摸出现录音以及离开停止录音并上传的功能(代码)

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML,录音等相关知识,匿名希望在学习及工作中可以帮助到您

本篇文章给大家带来的内容是关于html5实现手机触摸出现录音以及离开停止录音并上传的功能(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

以下是实现功能实例:
html

<!DOCTYPE html><html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" scr="record.js"></script></head><body>
    <p>
        <input id="microphone" type="button" />
    </p>
    <script>
    <script  type="text/javascript">        
    var microDome=document.getElementById('microphone');        
    var recorder;        
    var btnElem=document.getElementById("microphone");//获取ID
        function initEvent() {
            btnElem.addEventListener("touchstart", function(event) {
                //event.preventDefault();//阻止浏览器默认行为
                HZRecorder.get(function (rec) {
                    recorder = rec;
                    recorder.start();
                });
                      });
            btnElem.addEventListener("touchend", function(event) {
                //event.preventDefault();
                HZRecorder.get(function (rec) {
                    recorder = rec;
                    recorder.stop();
                })
                recorder.upload("/upload", function (state, e) {
                    switch (state) {                        
                    case 'uploading':                            
                    //var percentComplete = Math.round(e.loaded * 100 / e.total) + '%';
                            break;                        
                            case 'ok':                            
                            //alert(e.target.responseText);
                            alert("上传成功");                            
                            break;                        
                            case 'error':
                            alert("上传失败");                            
                            break;                        
                            case 'cancel':
                            alert("上传被取消");                            
                            break;
                    }
                });
                            });
        };
        initEvent();    
        <script/>

下面是js:

//兼容
window.URL = window.URL || window.webkitURL;
//获取计算机的设备:摄像头或者录音设备
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;var HZRecorder = function (stream, config) {
    config = config || {};
    config.sampleBits = config.sampleBits || 8;      //采样数位 8, 16
    config.sampleRate = config.sampleRate || (44100 / 6);   //采样率(1/6 44100)

    //创建一个音频环境对象
    var audioContext = window.AudioContext || window.webkitAudioContext;    
    var context = new audioContext();    
    var audioInput = context.createMediaStreamSource(stream);    
    // 第二个和第三个参数指的是输入和输出都是单声道,2是双声道。
    var recorder = context.createScriptProcessor(4096, 1, 1);    
    var audioData = {
        size: 0          //录音文件长度
        , buffer: []     //录音缓存
        , inputSampleRate: context.sampleRate    //输入采样率
        , inputSampleBits: 16       //输入采样数位 8, 16
        , outputSampleRate: config.sampleRate    //输出采样率
        , outputSampleBits: config.sampleBits       //输出采样数位 8, 16
        , input: function (data) {
            this.buffer.push(new Float32Array(data));            
            this.size += data.length;
        }
        , compress: function () { //合并压缩
            //合并
            var data = new Float32Array(this.size);            
            var offset = 0;            
            for (var i = 0; i < this.buffer.length; i++) {
                data.set(this.buffer[i], offset);
                offset += this.buffer[i].length;
            }            
            //压缩
            var compression = parseInt(this.inputSampleRate / this.outputSampleRate);            
            var length = data.length / compression;            
            var result = new Float32Array(length);            
            var index = 0, j = 0;            
            while (index < length) {
                result[index] = data[j];
                j += compression;
                index++;
            }            
            return result;
        }
        , encodeWAV: function () {
            var sampleRate = Math.min(this.inputSampleRate, this.outputSampleRate);            
            、var sampleBits = Math.min(this.inputSampleBits, this.outputSampleBits);            
            var bytes = this.compress();            
            var dataLength = bytes.length * (sampleBits / 8);            
            var buffer = new ArrayBuffer(44 + dataLength);            
            var data = new DataView(buffer);            
            var channelCount = 1;//单声道
            var offset = 0;            
            var writeString = function (str) {
                for (var i = 0; i < str.length; i++) {
                    data.setUint8(offset + i, str.charCodeAt(i));
                }
            }            
            // 资源交换文件标识符
            writeString('RIFF'); offset += 4;            
            // 下个地址开始到文件尾总字节数,即文件大小-8
            data.setUint32(offset, 36 + dataLength, true); offset += 4;            
            // WAV文件标志
            writeString('WAVE'); offset += 4;            
            // 波形格式标志
            writeString('fmt '); offset += 4;            
            // 过滤字节,一般为 0x10 = 16
            data.setUint32(offset, 16, true); offset += 4;            
            // 格式类别 (PCM形式采样数据)
            data.setUint16(offset, 1, true); offset += 2;            
            // 通道数
            data.setUint16(offset, channelCount, true); offset += 2;            
            // 采样率,每秒样本数,表示每个通道的播放速度
            data.setUint32(offset, sampleRate, true); offset += 4;            
            // 波形数据传输率 (每秒平均字节数) 单声道×每秒数据位数×每样本数据位/8
            data.setUint32(offset, channelCount * sampleRate * (sampleBits / 8), true); offset += 4;            
            // 快数据调整数 采样一次占用字节数 单声道×每样本的数据位数/8
            data.setUint16(offset, channelCount * (sampleBits / 8), true); offset += 2;            
            // 每样本数据位数
            data.setUint16(offset, sampleBits, true); offset += 2;            
            // 数据标识符
            writeString('data'); offset += 4;            
            // 采样数据总数,即数据总大小-44
            data.setUint32(offset, dataLength, true); offset += 4;            
            // 写入采样数据
            if (sampleBits === 8) {                
            for (var i = 0; i < bytes.length; i++, offset++) {                    
            var s = Math.max(-1, Math.min(1, bytes[i]));                    
            var val = s < 0 ? s * 0x8000 : s * 0x7FFF;
                    val = parseInt(255 / (65535 / (val + 32768)));
                    data.setInt8(offset, val, true);
                }
            } else {                
            for (var i = 0; i < bytes.length; i++, offset += 2) {                    
            var s = Math.max(-1, Math.min(1, bytes[i]));
                    
                    data.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);
                }
            }     
  


 

您可能想查找下面的文章:

  • HTML5知识点总结
  • HTML5的本地存储
  • HTML5本地存储之IndexedDB
  • Html5实现文件异步上传功能
  • Html5新标签datalist实现输入框与后台数据库数据的动态匹配
  • 详解HTML5 window.postMessage与跨域
  • HTML5拖放API实现拖放排序的实例代码
  • 解决html5中video标签无法播放mp4问题的办法
  • HTML5新特性 多线程(Worker SharedWorker)
  • Html5新增标签有哪些

相关文章

  • 2018-12-03HTML5最受欢迎的十个响应式框架
  • 2018-12-03css3 transform 3d 使用css3创建动态3d立方体(html5实践)_html5教程技巧
  • 2018-12-03百度音乐随身听PC端的前端技术?
  • 2017-08-06使用phonegap播放音频的实现方法
  • 2018-12-03CSS3的default伪类选择器使用详解
  • 2017-08-06HTML5 canvas基本绘图之图形变换
  • 2018-12-03关于15个最佳的响应式HTML5网站模板图文详解
  • 2018-12-03html5返回音频/视频的当前网络状态(activity)的属性networkState
  • 2018-12-03有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题 _html5教程技巧
  • 2018-12-03SVG基础|绘制SVG文字

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • HTML5-canvas的使用方法介绍
    • html5 progress标签怎么用?progress标签的属性介绍
    • Html5 什么是prefetch/prerender?介绍Html5 中prefetch/prerender
    • html5需遵循的6个设计原则_html5教程技巧
    • li标签实现日期,标题右对齐的方法
    • HTML5 IndexedDB本地储存
    • HTML5在canvas中绘制复杂形状附效果截图
    • 用html5绘制折线图的实例代码_html5教程技巧
    • 解析HTML5应用程序缓存Application Cache
    • html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有