微信音频接口(录制、上传、下载等)实现

微信公众号提供了一个音频接口,可以进行录音、上传、下载、识别等操作。

实现起来也比较简单,跟着文档来就行了。下面的把音频的功能放到了一个文件 里面,直接用即可:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/weui/css/weui.css"/>
    <link rel="stylesheet" href="/static/weui/css/weuix.css"/>
    <title>在线录音</title>
</head>
<body>
<div id="status" style="color: red;text-align: center">请操作</div>
<input class="weui-btn weui-btn_default" id="start" type="button" value="录音" />
<input class="weui-btn weui-btn_default" id="stop" type="button" value="停止录制" />
<br>
<input class="weui-btn weui-btn_default" id="play" type="button" value="播放" />
<input class="weui-btn weui-btn_default" id="pause" type="button" value="暂停播放" />
<input class="weui-btn weui-btn_default" id="stopPlay" type="button" value="停止播放" />
<br>
<input class="weui-btn weui-btn_default" id="translate" type="button" value="识别" />

<br>
<input class="weui-btn weui-btn_default" id="upload" type="button" value="上传" />
<input class="weui-btn weui-btn_default" id="download" type="button" value="下载" />

<script type="text/javascript" src="/static/js/jquery2.0.min.js"></script>
<script type="text/javascript" src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<!--<script type="text/javascript" src="/static/weui/js/vconsole.min.js"></script>-->

</body>
<script>
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '{$jsApiConfig.appid}', // 必填,公众号的唯一标识
        timestamp: '{$jsApiConfig.timestamp}', // 必填,生成签名的时间戳
        nonceStr: '{$jsApiConfig.noncestr}', // 必填,生成签名的随机串
        signature: '{$jsApiConfig.signature}',// 必填,签名
        jsApiList: [
            'startRecord',
            'playVoice',
            'stopRecord',
            'stopVoice',
            'pauseVoice',
            'onVoicePlayEnd',
            'onVoiceRecordEnd',
            'uploadVoice',
            'downloadVoice',
            'translateVoice',
        ] // 必填,需要使用的JS接口列表
    });

    var localId;
    var serverId;
    var timer;
    wx.ready(function () {      //需在用户可能点击分享按钮前就先调用

        //监听语音播放完毕接口
        wx.onVoicePlayEnd({
            success: function (res) {
                localId = res.localId; // 返回音频的本地ID
                $("#status").html('录音完毕')
                if (timer){
                    clearInterval(timer)
                }
            }
        });


        wx.onVoiceRecordEnd({
            // 录音时间超过一分钟没有停止的时候会执行 complete 回调
            complete: function (res) {
                localId = res.localId;
                $("#status").html('录音时间已达上限');
                if (timer){
                    clearInterval(timer)
                }
            }
        });

        $("#start").click(function () {
            wx.startRecord();

            var i=1;
             timer = setInterval(function(){
                $("#status").html('已录制'+i+'秒,还可以录制'+(60-i)+'秒');
                i++;
                if (i===60){
                    clearInterval(timer);
                }
            }, 1000)

        });
        $("#stop").click(function () {
            if (timer){
                clearInterval(timer)
            }
            wx.stopRecord({
                success: function (res) {
                     localId = res.localId;
                    $("#status").html('录音已停止')
                    console.log(res)
                }
            });

        });

        $("#play").click(function () {
            $("#status").html('录音播放中');
            wx.playVoice({
                localId: localId
            });
        });
        $("#stopPlay").click(function () {
            $("#status").html('录音已停止播放')
            wx.stopVoice({
                localId: localId // 需要停止的音频的本地ID,由stopRecord接口获得
            });
        });

        $("#pause").click(function () {
            $("#status").html('录音播放已暂停')
            wx.pauseVoice({
                localId: localId // 需要暂停的音频的本地ID,由stopRecord接口获得
            });
        });

        $("#download").click(function () {
            wx.downloadVoice({
                serverId: serverId, // 需要下载的音频的服务器端ID,由uploadVoice接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                    localId = res.localId; // 返回音频的本地ID
                    console.log('下载',res);
                }
            });
        });

        //翻译
        $("#translate").click(function () {
            $("#status").html('语音识别中....')
            wx.translateVoice({
                localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                    $("#status").html('识别结果:'+res.translateResult)
                    //alert(res.translateResult); // 语音识别的结果
                }
            });
        });

        ////上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器,此处获得的 serverId 即 media_id,参考文档 .目前多媒体文件下载接口的频率限制为10000次/天,如需要调高频率,请登录微信公众平台,在开发 - 接口权限的列表中,申请提高临时上限。
        $("#upload").click(function () {
            wx.uploadVoice({
                localId: localId, // 需要上传的音频的本地ID,由stopRecord接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                    serverId = res.serverId; // 返回音频的服务器端ID
                    console.log('上传',res)
                    $("#status").html('录音上传中...')
                    $.ajax({
                        url:"{:url('get_file')}",
                        data:{
                            serverId:serverId
                        },
                        dataType:'json',
                        success:function (res) {
                            $("#test").attr('scr',res.file.url)
                            console.log('up',res)
                            $("#status").html('上传操作完成,可以继续新的录音')
                        }
                    })
                }
            });
        });



    });

</script>
</html>

效果如下(未做css修饰):

微信图片_20200310231040.jpg

评论/留言