在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 微信语音demo(录音并上传)

微信语音demo(录音并上传)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:87.21M
  • 下载次数:29
  • 浏览次数:326
  • 发布时间:2019-07-13
  • 实例类别:C#语言基础
  • 发 布 人:hunanlongge
  • 文件格式:.rar
  • 所需积分:2
 相关标签: demo 语音 微信

实例介绍

【实例简介】

整个demo,都是调用的微信公众平台的接口来实现.. 

【实例截图】

from clipboard



from clipboard

【核心代码】

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="WebApplication9.index" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
    <meta content="telephone=no" name="format-detection">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <script src="Js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
    <style type="text/css">
        .voice-remote {
            border-radius: 50%;
            width: 4rem;
            height: 4rem;
            overflow: hidden;
            position: absolute;
            background: #f6f6f6;
            bottom: 1.5rem;
            left: 50%;
            -webkit-transform: translateX(-50%);
            transform: translateX(-50%);
            transition: all .2s;
            -webkit-transition: all .2s;
        }

            .voice-remote:active {
                width: 4.5rem;
                height: 4.5rem;
                bottom: 1rem;
                border: 1px solid #e7e7e7;
            }

            .voice-remote:before {
                content: "";
                width: 100%;
                height: 100%;
                position: absolute;
                z-index: 2;
                top: 0;
                left: 0;
                border-radius: 50%;
                background-image: linear-gradient(-90deg, transparent 50%, #1dc61c 50%);
            }

            .voice-remote:after {
                content: "";
                width: 100%;
                height: 100%;
                position: absolute;
                z-index: 3;
                bottom: 0;
                left: 0;
                border-radius: 50%;
                background-image: linear-gradient(-90deg, transparent 50%, #1dc61c 50%);
            }

            .voice-remote .cover {
                position: absolute;
                border-radius: 50%;
                width: 100%;
                height: 100%;
                z-index: 4;
                top: 0;
                left: 0;
                background-image: linear-gradient(-90deg, transparent 50%, #f6f6f6 50%);
            }

            .voice-remote .icon {
                position: absolute;
                width: 100%;
                height: 100%;
                top: 0;
                left: 0;
                background: #f6f6f6 url(../../images/voice.png) no-repeat center center;
                background-size: 100%;
                border-radius: 50%;
                z-index: 5;
            }

                .voice-remote .icon:active {
                    width: 80%;
                    height: 80%;
                    top: 10%;
                    left: 10%;
                    background-size: 100%;
                }

            .voice-remote:active:before {
                -webkit-animation: scoll linear 30s;
                animation: scoll linear 30s;
                -webkit-animation-fill-mode: forwards;
                animation-fill-mode: forwards;
            }

            .voice-remote:active:after {
                -webkit-animation: xscoll linear 60s;
                animation: xscoll linear 60s;
                -webkit-animation-fill-mode: forwards;
                animation-fill-mode: forwards;
            }

            .voice-remote:active .cover {
                -webkit-animation: hide linear 60s;
                animation: hide linear 60s;
                -webkit-animation-fill-mode: forwards;
                animation-fill-mode: forwards;
            }

        @-webkit-keyframes scoll {
            0% {
                -webkit-transform: rotate(0deg);
            }

            100% {
                -webkit-transform: rotate(180deg);
            }
        }

        @keyframes scoll {
            0% {
                transform: rotate(0deg);
            }

            100% {
                transform: rotate(180deg);
            }
        }

        @-webkit-keyframes xscoll {
            0% {
                -webkit-transform: rotate(0deg);
            }

            100% {
                -webkit-transform: rotate(360deg);
            }
        }

        @keyframes xscoll {
            0% {
                transform: rotate(0deg);
            }

            100% {
                transform: rotate(360deg);
            }
        }

        @-webkit-keyframes hide {
            0% {
                opacity: 1
            }

            49.9% {
                opacity: 1;
            }

            50% {
                opacity: 0;
            }

            100% {
                opacity: 0;
            }
        }

        @keyframes hide {
            0% {
                opacity: 1
            }

            49.9% {
                opacity: 1;
            }

            50% {
                opacity: 0;
            }

            100% {
                opacity: 0;
            }
        }
    </style>
    <script>
        wx.config({
            //debug: true,
            appId: '<%=JsAppid%>',
            timestamp: '<%=Jstimestamp%>',
            nonceStr: '<%=JsnonceStr%>',
            signature: '<%=Jssignature%>',
            jsApiList: [
                'checkJsApi',
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'onMenuShareQQ',
                'onMenuShareWeibo',
                'onMenuShareQZone',
                'hideMenuItems',
                'showMenuItems',
                'hideAllNonBaseMenuItem',
                'showAllNonBaseMenuItem',
                'translateVoice',
                'startRecord',
                'stopRecord',
                'onVoiceRecordEnd',
                'playVoice',
                'onVoicePlayEnd',
                'pauseVoice',
                'stopVoice',
                'uploadVoice',
                'downloadVoice',
                'chooseImage',
                'previewImage',
                'uploadImage',
                'downloadImage',
                'getNetworkType',
                'openLocation',
                'getLocation',
                'hideOptionMenu',
                'showOptionMenu',
                'closeWindow',
                'scanQRCode',
                'chooseWXPay',
                'openProductSpecificView',
                'addCard',
                'chooseCard',
                'openCard'
            ]
        });
        wx.ready(function () {

            /** 
            config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,
               所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,
               则可以直接调用,不需要放在ready函数中。
            */

            var localIds
            var lysj //录音时间
            var lyCss //样式
            var lyName //图片名字
            var localIdArr //本地ID集合字符串
            var serverIdArr //服务端ID集合字符串


            //注册微信播放录音结束事件【一定要放在wx.ready函数内】
            /* wx.onVoicePlayEnd({
                success: function (res) {
                }
            }); */

            //假设全局变量已经在外部定义
            //按下开始录音
            $('#talk_btn').on('touchstart', function (event) {
                event.preventDefault();
                START = new Date().getTime();
                if (localIds != null) {
                    if (localIdArr == null) {
                        localIdArr = localIds
                    } else {
                        localIdArr  = ","   localIds;
                    }
                }
                localIds = null;
                recordTimer = setTimeout(function () {
                    wx.startRecord({
                        success: function () {
                            localStorage.rainAllowRecord = 'true';
                            wx.onVoiceRecordEnd({
                                // 录音时间超过一分钟没有停止的时候会执行 complete 回调
                                complete: function (res) {
                                    END = new Date().getTime();
                                    localIds = res.localId;
                                    alert('最多只能录制一分钟');
                                }
                            })
                        },
                        cancel: function () {
                            alert('用户拒绝授权录音');
                        }
                    });
                }, 300);
            });

            var yyTotal = 1; //语音数量
            //松手结束录音
            $('#talk_btn').on('touchend', function (event) {
                event.preventDefault();
                if (localIds != null) {

                } else {
                    END = new Date().getTime();
                }
                if ((END - START) < 300) {
                    END = 0;
                    START = 0;
                    //小于300ms,不录音
                    clearTimeout(recordTimer);
                    alert("录音时间太短,录音不做保存!")
                } else {
                    $("#voiceButton").show();
                    lysj = (END - START) / 1000;
                    if (lysj <= 10) {
                        lyName = 10;
                        lyCss = "height: 42px;width: 79px;";
                    } else if (10 < lysj && lysj <= 20) {
                        lyName = 20;
                        lyCss = "height: 42px;width: 129px;";
                    } else if (20 < lysj && lysj <= 30) {
                        lyName = 30;
                        lyCss = "height: 42px;width: 177px;";
                    } else if (30 < lysj && lysj <= 40) {
                        lyName = 40;
                        lyCss = "height: 42px;width: 227px;";
                    } else if (40 < lysj && lysj <= 50) {
                        lyName = 50;
                        lyCss = "height: 42px;width: 277px;";
                    } else if (50 < lysj && lysj <= 60) {
                        lyName = 60;
                        lyCss = "height: 42px;width: 327px;";
                    } else {
                        lyName = 60;
                        lyCss = "height: 42px;width: 327px;";
                        lysj = "60.00";
                    }
                    lysj = ""   lysj   "";
                    lysj = lysj.substr(0, lysj.lastIndexOf("."));

                    wx.stopRecord({
                        success: function (res) {
                            if (localIds != null) {

                            } else {
                                localIds = res.localId;
                            }
                            $("#rwnrVoice").append("<li id='"   localIds.substr(localIds.lastIndexOf("/")   1)   "' style='text-align: left;'><p id='p"   RemoveStr(localIds)   "' style='position: absolute;margin-left:36px;margin-top:-32px'>"   lysj   "s</p>"
                                  "<img id='"   localIds   "' strt='0' onclick='playVoice(this,this.id,"   lysj   ")' "
                                  "src='images/mes_read.png?v=154'  style='"   lyCss   "'>"
                                  "</li>");

                            //playVoice(localIds);
                            uploadVoice(localIds);
                        },
                        fail: function (res) {
                            alert(JSON.stringify(res));
                        },
                    });
                }
            });

            //播放语音接口
            $('#_playVoice').on('click', function () {
                wx.playVoice({
                    localId: localIds // 需要播放的音频的本地ID,由stopRecord接口获得
                });

            })
            //暂停播放接口
            $('#_pauseVoice').on('click', function () {

                wx.pauseVoice({
                    localId: localIds // 需要播放的音频的本地ID,由stopRecord接口获得
                });

            })
            //停止播放接口
            $('#_stopVoice').on('click', function () {

                wx.stopVoice({
                    localId: localIds // 需要播放的音频的本地ID,由stopRecord接口获得
                });

            })
            //上传录音
            function uploadVoice(localId) {
                //调用微信的上传录音接口把本地录音先上传到微信的服务器
                //不过,微信只保留3天,而我们需要长期保存,我们需要把资源从微信服务器下载到自己的服务器
                wx.uploadVoice({
                    localId: localId, // 需要上传的音频的本地ID,由stopRecord接口获得
                    isShowProgressTips: 1, // 默认为1,显示进度提示
                    success: function (res) {
                        var serverId = res.serverId; // 返回音频的服务器端ID
                        $("#serverId").val(serverId);
                    },
                    error: function (res) {
                        alert("上传出错")
                    }
                });
            }

            //删除语音
            /**
            删除后把本地录音集合中的最后一段录音id赋予给当前id
        	
            **/
            $('#_player').on('click', function () {

                document.getElementById('audio_player').play();

            })
            $("#_deleteVoice").on("click", function () {
                var name = localIds.substr(localIds.lastIndexOf("/")   1);
                $("li#"   name).remove();
                var temp = localIdArr.substr(localIdArr.lastIndexOf("w"));
                if (localIdArr.indexOf(",") != -1) {
                    localIdArr = localIdArr.replace(","   temp, "");
                } else {
                    localIdArr = localIdArr.replace(temp, "");
                }
                localIds = temp;
                yyTotal--;
            });
        });
        var timer;
        function RemoveStr(id) {
            return id.replace("://", "");
        }
        function playVoice(obj, id, seconds) {
            if ($(obj).attr("strt") == "0") {
                $(obj).attr("strt", "1");
                $("#p"   RemoveStr(id)).hide();
                $(obj).attr("src", "images/mes_reading.gif?v=154");
                wx.playVoice({
                    localId: id // 需要播放的音频的本地ID,由stopRecord接口获得
                });
                timer = setTimeout(function () {
                    $(obj).attr("strt", "0");
                    $("#p"   RemoveStr(id)).show();
                    $(obj).attr("src", "images/mes_read.png?v=154");
                }, seconds * 1000);
            } else {
                clearTimeout(timer);
                $(obj).attr("strt", "0");
                $("#p"   RemoveStr(id)).show();
                $(obj).attr("src", "images/mes_read.png?v=154");
                wx.stopVoice({
                    localId: id // 需要播放的音频的本地ID,由stopRecord接口获得
                });
            }
        }
        $(document).ready(function () {
            //$("#audio_player").attr("src", data.Message);
            //$("#_player").on("click", function () {

            //    document.getElementById('audio_player').play();
            //});
            //上传录音接口
            $('#_uploadVoice').on('click', function () {
                var serverId = $("#serverId").val();
                if (serverId != null && serverId != "") {
                    var result = confirm("确定上传所有录音吗?");
                    if (result == true) {
                        //只有一段录音直接上传
                        $.post("API/UploadVoiceAPI.ashx", "mediaId="   serverId, function (data) {
                            //上传后不可用
                            //$("#_uploadVoice").attr("disabled", "disabled");
                            //上传后不可返回普通任务
                            //$("#inputText").attr("disabled", "disabled")
                            if (data.Success) {
                                //alert(data.Message);
                                if ($("#audio_player").find("source")[0] != null) {
                                    $($("#audio_player").find("source")[0]).attr("src", data.Message);
                                    $("#_player").show();
                                }
                            }
                            isUploadVoice = true;
                        });
                    } else {
                    }
                } else {

                    alert("请先录音哦!");
                }
            })
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:HiddenField ID="serverId" runat="server" />
        <div class="content">

            <ul id="rwnrVoice">
            </ul>
            <div class="form-group text-center">
                <button id="_playVoice" type="button" class="btn btn-primary btn-hight">
                    <h2>播放录音</h2>
                </button>
            </div>
            <div class="form-group text-center">
                <button id="_pauseVoice" type="button" class="btn btn-warning btn-hight">
                    <h2>暂停播放</h2>
                </button>
            </div>
            <div class="form-group text-center">
                <button id="_stopVoice" type="button" class="btn btn-success btn-hight">
                    <h2>停止播放</h2>
                </button>
            </div>
            <div class="form-group text-center">
                <button id="_uploadVoice" type="button" class="btn btn-info btn-hight">
                    <h2>上传录音</h2>
                </button>
            </div>
            <div class="form-group text-center">
                <button id="_player" type="button" style="display: none;" class="btn btn-info btn-hight">
                    <h2>播放上传</h2>
                </button>
                <audio id="audio_player">
                    <source type="audio/mpeg">
                </audio>
            </div>
            <div class="voice-remote" id="talk_btn">
                <span class="cover"></span>
                <span class="icon"></span>
            </div>
        </div>
    </form>
</body>
</html>

标签: demo 语音 微信

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警