zoukankan      html  css  js  c++  java
  • 微信语音上传 下载

    假如现在有一个按钮 

      <div class="inp_btn voice_btn active" id="record">
                    按住 说话
                </div>
    

    下面就是调用微信jssdk的方法

            var recorder;
            var btnRecord = $('#record');
            var startTime = 0;
            var recordTimer = 300;
    var url=window.location.href; // 发语音 $.ajax({ url: 'url请求需要微信的一些东西 下面success就是返回的东西', type: 'get', data: { url: url }, success: function (data) { var json = $.parseJSON(data); //alert(json); //假设已引入微信jssdk。【支持使用 AMD/CMD 标准模块加载方法加载】 wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: json.appid, // 必填,公众号的唯一标识 timestamp: json.timestamp, // 必填,生成签名的时间戳 nonceStr: json.nonceStr, // 必填,生成签名的随机串 signature: json.signature, // 必填,签名,见附录1 jsApiList: [ "startRecord", "stopRecord", "onVoiceRecordEnd", "playVoice", "pauseVoice", "stopVoice", "onVoicePlayEnd", "uploadVoice", "downloadVoice", ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function () { btnRecord.on('touchstart', function (event) { event.preventDefault(); startTime = new Date().getTime(); // 延时后录音,避免误操作 recordTimer = setTimeout(function () { wx.startRecord({ success: function () { localStorage.rainAllowRecord = 'true'; //style="display:block" $(".voice_icon").css("display", "block"); }, cancel: function () { layer.open({ content: '用户拒绝了录音授权', btn: '确定', shadeClose: false, }); } }); }, 300); }).on('touchend', function (event) { event.preventDefault(); // 间隔太短 if (new Date().getTime() - startTime < 300) { startTime = 0; // 不录音 clearTimeout(recordTimer); } else { // 松手结束录音 wx.stopRecord({ success: function (res) { $(".voice_icon").css("display", "none"); voice.localId = res.localId; // 上传到服务器 uploadVoice(); }, fail: function (res) { //alert(JSON.stringify(res)); layer.open({ content: JSON.stringify(res), btn: '确定', shadeClose: false, }); } }); } }); }); }, error: function () { } })

     上传语音的方法 

     function uploadVoice() {
            //调用微信的上传录音接口把本地录音先上传到微信的服务器
            //不过,微信只保留3天,而我们需要长期保存,我们需要把资源从微信服务器下载到自己的服务器
            wx.uploadVoice({
                localId: voice.localId, // 需要上传的音频的本地ID,由stopRecord接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                    // alert(JSON.stringify(res));
                    //把录音在微信服务器上的id(res.serverId)发送到自己的服务器供下载。
                    voice.serverId = res.serverId;
                    $.ajax({
                        url: '/QyhSpeech/DownLoadVoice',
                        type: 'post',
                        data: { serverId: res.serverId, Id: Id },
                        dataType: "json",
                        success: function (data) {
                            if (data.Result == true && data.ResultCode == 1) {
                                layer.open({
                                    content: "录音上传完成!",//data.Message
                                    btn: '确定',
                                    shadeClose: false,
                                    yes: function (index) {
                                        window.location.href = window.location.href;
                                    }
                                });
                            }
                            else {
                                layer.open({
                                    content: data.Message,
                                    btn: '确定',
                                    shadeClose: false,
                                });
                            }
                        },
                        error: function (xhr, errorType, error) {
                            layer.open({
                                content: error,
                                btn: '确定',
                                shadeClose: false,
                            });
                        }
                    });
    
                }
            });
        }
    

      后台调用的方法     需要一个ffmpeg.exe自行下载

     //下载语音并且转换的方法
            private string GetVoicePath(string voiceId, string access_token)
            {
                string voice = "";
                try
                {
                    Log.Debug("access_token:", access_token);
                    //调用downloadmedia方法获得downfile对象
                    DownloadFile downFile = WeiXin.DownloadMedia(voiceId, access_token);
                    if (downFile.Stream != null)
                    {
                        string fileName = Guid.NewGuid().ToString();
                        //生成amr文件
                        string amrPath = Server.MapPath("~/upload/audior/");
                        if (!Directory.Exists(amrPath))
                        {
                            Directory.CreateDirectory(amrPath);
                        }
                        string amrFilename = amrPath + fileName + ".amr";
                        //var ss = GetAMRFileDuration(amrFilename);
                        //Log.Debug("ss", ss.ToString());
                        using (FileStream fs = new FileStream(amrFilename, FileMode.Create))
                        {
                            byte[] datas = new byte[downFile.Stream.Length];
                            downFile.Stream.Read(datas, 0, datas.Length);
                            fs.Write(datas, 0, datas.Length);
                        }
                        //转换为mp3文件
                        string mp3Path = Server.MapPath("~/upload/audio/");
                        if (!Directory.Exists(mp3Path))
                        {
                            Directory.CreateDirectory(mp3Path);
                        }
                        string mp3Filename = mp3Path + fileName + ".mp3";
                        AudioHelper.ConvertToMp3(Server.MapPath("~/ffmpeg/"), amrFilename, mp3Filename);
                        voice = fileName;
                  
                        Log.Debug("voice:", voice);
                    }
                }
                catch { }
                return voice;
            }
    

      调用GetVoicePath

     //下载微信语音文件
            public JsonResult DownLoadVoice()
            {
                var file = "";
                try
                {
                    var serverId = Request["serverId"];//文件的serverId
                    file = GetVoicePath(serverId, CacheHelper.GetAccessToken());
                    return Json(new ResultJson { Message = file, Result = true, ResultCode = 1 });
                }
                catch (Exception ex)
                {
                    return Json(new ResultJson { Message = ex.Message, Result = false, ResultCode = 0 });
                }
    
            }
    

      

    AudioHelper类
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading;
    
    namespace EYO.Common
    {
        /// <summary>
        /// 声音帮助类
        /// </summary>
        public sealed class AudioHelper
        {
            private const string FfmpegUsername = "ffmpeg";
            private const string FfmpegPassword = "it4pl803";
    
            /// <summary>
            /// 音频转换
            /// </summary>
            /// <param name="ffmpegPath">ffmpeg文件目录</param>
            /// <param name="soruceFilename">源文件</param>
            /// <param name="targetFileName">目标文件</param>
            /// <returns></returns>
            public static string ConvertToMp3(string ffmpegPath, string soruceFilename, string targetFileName)
            {
                //string cmd = ffmpegPath + @"ffmpeg.exe -i " + soruceFilename + " " + targetFileName;
                string cmd = ffmpegPath + @"ffmpeg.exe -i " + soruceFilename + " -ar 44100 -ab 128k " + targetFileName;
                return ConvertWithCmd(cmd);
            }
    
            private static string ConvertWithCmd(string cmd)
            {
                try
                {
                    System.Diagnostics.Process process = new System.Diagnostics.Process();
                    process.StartInfo.FileName = "cmd.exe";
                    process.StartInfo.UseShellExecute = false;
                    process.StartInfo.CreateNoWindow = true;
                    process.StartInfo.RedirectStandardInput = true;
                    process.StartInfo.RedirectStandardOutput = true;
                    process.StartInfo.RedirectStandardError = true;
                    process.Start();
                    process.StandardInput.WriteLine(cmd);
                    process.StandardInput.AutoFlush = true;
                    Thread.Sleep(1000);
                    process.StandardInput.WriteLine("exit");
                    process.WaitForExit();
                    string outStr = process.StandardOutput.ReadToEnd();
                    process.Close();
                    return outStr;
                }
                catch (Exception ex)
                {
                    return "error" + ex.Message;
                }
            }
        }
    }
    

      文中需要  DownloadFile downFile = WeiXin.DownloadMedia(voiceId, access_token); 需要一个类库 到时候直接放到项目里面即可(我也是找到)

     http://files.cnblogs.com/files/hbh123/Loogn.WeiXinSDK.rar

  • 相关阅读:
    SQL 左外连接,右外连接,全连接,内连接
    CentOS 7.0默认使用的是firewall作为防火墙
    Python-WEB自动化-三种等待方式
    Python + Selenium的web自动化框架
    BS架构和CS架构的区别
    ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
    CentOS 7镜像下载
    CentOS7各个版本镜像下载地址
    CentOS7的Minimal版本安装
    Python 文字转语音
  • 原文地址:https://www.cnblogs.com/hbh123/p/7368251.html
Copyright © 2011-2022 走看看