虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > ASP.NET > 微信语音上传 下载功能实例代码

微信语音上传 下载功能实例代码
类别:ASP.NET   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了微信语音上传 下载功能实例代码,需要的朋友可以参考下

假如现在有一个按钮

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

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

    var recorder;
    var btnRecord = $('#record');
    var startTime = 0;
    var recordTimer = 300;
    // 发语音$.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;
    }
    }
    }
    }

  文中标记红色的需要以下一个类库 放在文中最后链接里面 到时候直接放到项目里面即可(我也是找到)

总结

以上所述是小编给大家介绍的微信语音上传 下载功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关热词搜索: 微信语音上传 下载 微信语音上传