javascript - mui框架做录音,怎么限制超过120秒自动结束录音

查看:128
本文介绍了javascript - mui框架做录音,怎么限制超过120秒自动结束录音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<!DOCTYPE HTML>
<html>

    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="HandheldFriendly" content="true" />
        <meta name="MobileOptimized" content="320" />
        <title>Hello H5+ 2</title>
        <script type="text/javascript" src="../js/common.js"></script>
        <script type="text/javascript">
            var gentry = null,
                hl = null,
                le = null;
            var er = null,
                ep = null;
            // H5 plus事件处理
            function plusReady() {
                // 获取音频目录对象
                plus.io.resolveLocalFileSystemURL("_doc/", function(entry) {
                    entry.getDirectory("audio", {
                        create: true
                    }, function(dir) {
                        gentry = dir;
                        updateHistory();
                    }, function(e) {
                        outSet("Get directory \"audio\" failed: " + e.message);
                    });
                }, function(e) {
                    outSet("Resolve \"_doc/\" failed: " + e.message);
                });
            }
            if(window.plus) {
                plusReady();
            } else {
                document.addEventListener("plusready", plusReady, false);
            }
            // DOMContentLoaded事件处理
            document.addEventListener("DOMContentLoaded", function() {
                // 获取DOM元素对象
                hl = document.getElementById("history");
                le = document.getElementById("empty");
                er = document.getElementById("record");
                rt = document.getElementById("rtime");
                ep = document.getElementById("play");
                pt = document.getElementById("ptime");
                pp = document.getElementById("progress")
                ps = document.getElementById("schedule");
            }, false);
            // 添加播放项
            function createItem(entry) {
                var li = document.createElement("li");
                li.className = "ditem";
                li.innerHTML = '<span class="iplay"><font class="aname"></font><br/><font class="ainf"></font></span>';
                li.setAttribute("onclick", "playAudio(this);");
                hl.insertBefore(li, le.nextSibling);
                li.querySelector(".aname").innerText = entry.name;
                li.querySelector(".ainf").innerText = "...";
                li.entry = entry;
                updateInformation(li);
                // 设置空项不可见
                le.style.display = "none";
            }
            // 开始录音
            var r = null,
                t = 0,
                ri = null,
                rt = null;

            function startRecord() {
                outSet("开始录音:");
                r = plus.audio.getRecorder();
                if(r == null) {
                    outLine("录音对象未获取");
                    return;
                }
                r.record({
                    filename: "_doc/audio/"
                }, function(p) {
                    outLine("录音完成:" + p);
                    plus.io.resolveLocalFileSystemURL(p, function(entry) {
                        createItem(entry);
                    }, function(e) {
                        outLine("读取录音文件错误:" + e.message);
                    });
                }, function(e) {
                    outLine("录音失败:" + e.message);
                });
                er.style.display = "block";
                t = 0;
                ri = setInterval(function() {
                    t++;
                    rt.innerText = timeToStr(t);
                }, 1000);
            }
            // 停止录音
            function stopRecord() {
                er.style.display = "none";
                rt.innerText = "00:00:00";
                clearInterval(ri);
                ri = null;
                r.stop();
                w = null;
                r = null;
                t = 0;
            }
            // 清除历史记录
            function cleanHistory() {
                hl.innerHTML = '<li id="empty" class="ditem-empty">无历史记录</li>';
                le = document.getElementById("empty");
                // 删除音频文件
                outSet("清空录音历史记录:");
                gentry.removeRecursively(function() {
                    // Success
                    outLine("操作成功!");
                }, function(e) {
                    ouline("操作失败:" + e.message);
                });
            }
            // 获取录音历史列表
            function updateHistory() {
                if(!gentry) {
                    return;
                }
                var reader = gentry.createReader();
                reader.readEntries(function(entries) {
                    for(var i in entries) {
                        if(entries[i].isFile) {
                            createItem(entries[i]);
                        }
                    }
                }, function(e) {
                    outLine("读取录音列表失败:" + e.message);
                });
            }
            // 获取录音文件信息
            function updateInformation(li) {
                if(!li || !li.entry) {
                    return;
                }
                var entry = li.entry;
                entry.getMetadata(function(metadata) {
                    li.querySelector(".ainf").innerText = dateToStr(metadata.modificationTime);
                }, function(e) {
                    outLine("获取文件\"" + entry.name + "\"信息失败:" + e.message);
                });
            }
            // 播放音频文件
            function playAudio(li) {
                if(!li || !li.entry) {
                    ouSet("无效的音频文件");
                    return;
                }
                outSet("播放音频文件:" + li.entry.name);
                startPlay("_doc/audio/" + li.entry.name);
            }
            // 播放文件相关对象
            var p = null,
                pt = null,
                pp = null,
                ps = null,
                pi = null;
            // 开始播放
            function startPlay(url) {
                ep.style.display = "block";
                var L = pp.clientWidth;
                p = plus.audio.createPlayer(url);
                p.play(function() {
                    outLine("播放完成!");
                    // 播放完成
                    pt.innerText = timeToStr(d) + "/" + timeToStr(d);
                    ps.style.webkitTransition = "all 0.3s linear";
                    ps.style.width = L + "px";
                    stopPlay();
                }, function(e) {
                    outLine("播放音频文件\"" + url + "\"失败:" + e.message);
                });
                // 获取总时长
                var d = p.getDuration();
                if(!d) {
                    pt.innerText = "00:00:00/" + timeToStr(d);
                }
                pi = setInterval(function() {
                    if(!d) { // 兼容无法及时获取总时长的情况
                        d = p.getDuration();
                    }
                    var c = p.getPosition();
                    if(!c) { // 兼容无法及时获取当前播放位置的情况
                        return;
                    }
                    pt.innerText = timeToStr(c) + "/" + timeToStr(d);
                    var pct = Math.round(L * c / d);
                    if(pct < 8) {
                        pct = 8;
                    }
                    ps.style.width = pct + "px";
                }, 1000);
            }
            // 停止播放
            function stopPlay() {
                clearInterval(pi);
                pi = null;
                setTimeout(resetPlay, 500);
                // 操作播放对象
                if(p) {
                    p.stop();
                    p = null;
                }
            }
            // 重置播放页面内容
            function resetPlay() {
                ep.style.display = "none";
                ps.style.width = "8px";
                ps.style.webkitTransition = "all 1s linear";
                pt.innerText = "00:00:00/00:00:00";
            }
            // 重写关闭
            var _back = window.back;

            function resetback() {
                // 停止播放
                if(ep.style.display == "block") {
                    stopPlay();
                } else if(er.style.display == "block") {
                    stopRecord();
                } else {
                    _back();
                }
            }
            window.back = resetback;
        </script>
        <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
        <style type="text/css">
            .rp {
                width: 100%;
                height: 100%;
                display: none;
                text-align: center;
                position: fixed;
                top: 0;
                background: rgba(0, 0, 0, 0.8);
                z-index: 9999;
                overflow: hidden;
            }
            
            .aname {
                font-size: 16px;
            }
            
            .ainf {
                font-size: 12px;
            }
            
            .rtime {
                font-size: 22px;
                color: #FF0000;
            }
            
            .ptime {
                margin-top: 40%;
                font-size: 22px;
                color: #FFFFFF;
            }
            
            .rprogress {
                background: url(../img/arecord.png) no-repeat center center;
                background-size: 32px 32px;
            }
            
            .rschedule {
                background-color: rgba(0, 0, 0, 0);
                border: 5px solid rgba(0, 183, 229, 0.9);
                opacity: .9;
                border-left: 5px solid rgba(0, 0, 0, 0);
                border-right: 5px solid rgba(0, 0, 0, 0);
                border-radius: 50px;
                box-shadow: 0 0 15px #2187e7;
                width: 36px;
                height: 36px;
                margin: 0 auto;
                -webkit-animation: spin 1s infinite linear;
                animation: spin 1s infinite linear;
            }
            
            @-webkit-keyframes spin {
                0% {
                    -webkit-transform: rotate(0deg);
                }
                100% {
                    -webkit-transform: rotate(360deg);
                }
            }
            
            @keyframes spin {
                0% {
                    transform: rotate(0deg);
                }
                100% {
                    transform: rotate(360deg);
                }
            }
            
            .progress {
                width: 90%;
                background-color: #666;
                margin: 0 5%;
                border: 1px solid #222;
                -webkit-border-radius: 5px;
                border-radius: 5px;
            }
            
            .schedule {
                width: 8px;
                height: 8px;
                margin: 1px 0;
                background-color: #FFCC33;
                -webkit-border-radius: 4px;
                border-radius: 4px;
                -webkit-transition: all 1s linear;
                transition: all 1s linear;
            }
            
            .stop {
                width: 72px;
                height: 72px;
                background: url(../img/astop.png) center center;
                background-size: 72px 72px;
                margin: auto;
                -webkit-border-radius: 72px;
                border-radius: 72px;
            }
            
            .stop:active {
                -webkit-box-shadow: 0 3px 8px rgba(0, 0, 0, 0.5) inset;
                box-shadow: 0 3px 8px rgba(0, 0, 0, 0.5) inset;
            }
            
            .iplay {
                display: block;
                background: no-repeat right center url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABYCAYAAAADWlKCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOS8xMi8xM5w+I3MAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzVxteM2AAAD9UlEQVR4nO2b3XETMRRGDwzvoYOkg5hRAVkqiKmAdIA7wHSQVECoALsC1gXciV0BTge4gvCwgnHk9d/+WF8m97ztxrlXs8fS1Urym6enJxwd3uZugPMcFyKGCxHDhYjhQsRwIWK4EDFciBguRAwXIoYLEcOFiOFCxHAhYrgQMVyIGC5EDBcihgsRw4WI4ULEcCFiuBAx3uVuwDGY2XtgCBTAALjc8tEFMAdKYBJC+HOK9nXBm5dwUM7MCmAEXDcMMQVuQwhlV23qC2khZjYAboGrjkLOgFEIYd5RvM6RrSFmdgs80J0MYqyHGFsSuR4S60TJ9vrwCEziZ+YhhGXy/xdU9aWgqjfnW+IsgEKtvkgJiUPUPfUyZsD42DoQ68+Y+p62AG6UhjAZITt6xopq3L9vGf+Gqh6dJX+S6ilKNaRkU8YCGLSVARBjDGLMdS5jbgkkhMQiWyejSGtEG2KsghopKoU++5AV68ZDcrvXYWTH8Pghdz1R6CHpN3MFDPsc02PsYcy1qy0nJ6uQOANKZz+jfcOUmd3H6W1jYo5RcvsqtikbuXtI+kBmBxbwz8DczMZtksdcsz1tOinZhMRxPF2bGh8R4gz4amZLMxu2aEqa8zq2LQs5e0j6EB8bLv6dAz/NrGwyjMWcj3vadjJyCimS60nLeFfAbzO7bfANT3MXLdvSmJxCBsl12VHcL8AyvpkfSpo7bdvJyCkkfQfocv5/Bnw3s/mBs6Y097aFzd7JPcv6T5dv5GtcAr/2TZN7yt0IGSE908k0+RS8FiEvhhd1yKEFUw5YAVBApoe0XQrZwgL4GEIY7pLRU+5G5OwhC57PZgbAsqPYK6rdxUMXC9Npbro8fzJy9pB0qll0FPcOuDhCRl3ubEvwOYWUyXXb5YoZ1X7GqMHSfZq7bNmWxuQUki5XnDdc+n4EPoUQiiabSzFnejKl7TJOY7IJid/iaXJ7fESIFfCNas+9zQNMc05zHnjIPctKx/mrA9egflCJGLd5eDFXukGWdddQYU+95PlDWVE97GXPeS+oivf6saBZCKHoM+8+cvcQ2NyhOwMmfW4SxdgTNs9oZd0tBAEhsRDfJbcvgbIPKTtOnNzlPnECAkPWP8xsTv3ZrJ1v2UfmuKDqGRt5QgjZ9kDWyd5D1iioP1U4P3KzqZYYY5v0om38rpDpIeCHrUFMCPjPEeSE/COetf3SU/i7EEL2GVUdSjXkGfGBfWDzIFsb/q93dRizU2R7yDr+o09R/GfRzsmRrSGvFRcihgsRw4WI4ULEcCFiuBAxXIgYLkQMFyKGCxHDhYjhQsRwIWK4EDFciBguRAwXIoYLEcOFiOFCxHAhYrgQMf4CVuqCm+17t3sAAAAASUVORK5CYII=);
                background-size: 50px 44px;
                -ms-touch-action: auto;
            }
        </style>
    </head>

    <body>
        <header id="header">
            <div class="nvbt iback" onclick="back(true);"></div>
            <div class="nvtt">Audio</div>
            <div class="nvbt idoc" onclick="openDoc('Audio Document','/doc/audio.html')"></div>
        </header>
        <div id="dcontent" class="dcontent">
            <br/>
            <div class="button" onclick="startRecord()">开始录音</div>
            <div class="button" onclick="startPlay('_www/audio/friendship.mp3')">播放音乐</div>
            <br/>
            <!-- History list -->
            <ul id="history" class="dlist" style="text-align:left;">
                <li id="empty" class="ditem-empty">无历史记录</li>
            </ul>
            <br/>
            <div class="button button-waring" onclick="cleanHistory();">清空历史记录</div>
            <br/>
        </div>
        <div id="output">
            Audio用于管理音频设备,可调用麦克风录制音频文件,也可播放音频文件。
        </div>
        <div id="play" class="rp">
            <div id="ptime" class="ptime">00:00:00/00:00:00</div><br/>
            <div id="progress" class="progress">
                <div id="schedule" class="schedule"></div>
            </div>
            <br/>
            <div class="stop" onclick="stopPlay();outSet('停止播放!');"></div>
        </div>
        <div id="record" class="rp">
            <div style="width:100%;height:20%;"></div>
            <div class="rprogress">
                <div class="rschedule"></div>
            </div>
            <br/>
            <div id="rtime" class="rtime">00:00:00</div><br/>
            <div class="stop" onclick="stopRecord();"></div>
        </div>
    </body>
    <script type="text/javascript" src="../js/immersed.js"></script>

</html>

解决方案

没有使用过mui,
不过看你这里的代码,感觉在
开始录音时startRecord()添加一个setTimeout,定时120秒自动执行stopRecord()就可以了吧?
类似这样

setTimeout("stopRecord()",120000);

这篇关于javascript - mui框架做录音,怎么限制超过120秒自动结束录音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆