视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
微信语音上传 下载功能实例代码
2020-11-27 22:35:21 责编:小采
文档


假如现在有一个按钮

<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;
 }
 }
 }
}

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

总结

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

下载本文
显示全文
专题