标题微信公众号如何实现录音功能(包含下载到服务器+AMR转化为MP3格式)

您所在的位置:网站首页 扫码录音怎样下载 标题微信公众号如何实现录音功能(包含下载到服务器+AMR转化为MP3格式)

标题微信公众号如何实现录音功能(包含下载到服务器+AMR转化为MP3格式)

2024-07-12 14:52| 来源: 网络整理| 查看: 265

标题微信公众号如何实现录音功能(包含下载到服务器+AMR转化为MP3格式)

我们在微信公众号开发的过程中,总会遇到各种各样的需求和难题,然而最大的难题是微信公众号的开发文档,说多了都是泪,总结起来就是一个‘虚’字了得,不过项目还是要做的,下面是我在开发过程中的一点心得,希望对大家能有帮助,不足之处,请大家多多指正,共同学习。 在这里插入图片描述 一、 微信音频接口说明 具体以最新官方文档为准原文地址: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#23

1.1.1 权限的声明 在使用前需要申明相对应的权限,具体使用以个人卡发需求为主。

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

1.1.2 开始录音接口

wx.startRecord();

1.1.3 停止录音接口

wx.stopRecord({ success: function (res) { var localId = res.localId; } });

1.1.4 监听录音自动停止接口

wx.onVoiceRecordEnd({ // 录音时间超过一分钟没有停止的时候会执行 complete 回调 complete: function (res) { var localId = res.localId; } });

1.1.5 播放语音接口

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

1.1.6 暂停播放接口

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

1.1.7 停止播放接口

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

1.1.8 监听语音播放完毕接口

wx.onVoicePlayEnd({ success: function (res) { var localId = res.localId; // 返回音频的本地ID } });

1.1.9 上传语音接口

wx.uploadVoice({ localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) { var serverId = res.serverId; // 返回音频的服务器端ID } });

备注:上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器,此处获得的 serverId 即 media_id,参考文档 .目前多媒体文件下载接口的频率限制为10000次/天,如需要调高频率,请登录微信公众平台,在开发 - 接口权限的列表中,申请提高临时上限。

1.2.0下载语音接口

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

1.2.1智能接口 识别音频并返回识别结果接口

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

二、 H5页面功能实现

封装一下录音 的方法,在需要用的地址直接调用就可以。

WechatEvent: { //开始录音 Wechat_StartRecord: function () { wx.startRecord({ cancel: function () { //用户取消权限的处理... } }); }, //停止录音 Wechat_StopRecord: function () { wx.stopRecord({ success: function (res) { var localId = res.localId; //上传录音文件到微信服务器 wx.uploadVoice({ localId: localId, // 需要上传的音频的本地ID,由stopRecord接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) { var serverId = res.serverId; // 返回音频的服务器端ID WechatEvent.DownLoadAudio(serverId );//上传到自己服务器下载的方法.... } }); } }); }, //自己服务器下载微信服务器录音文件的方法(服务器的方法) DownLoadAudio: function (serverId) { jQuery.ajax({ type: "POST",//使用get方法访问后台 dataType: "json", url: "自己的接口地址", data: { "serverId": serverId}, //上传到微信服务器后返回的serverId success: function (data) { //服务器处理成功的时候页面自己处理 }, } }); },

三、服务器端下载微信音频文件部分

服务器利用ffmpeg.exe 将从微信服务器上获取的录音文件**,转化为自己想要的格式**

核心代码:

3.1.1 下载微信服务器的录音文件到服务器指定的文件夹下 核心代码:

string url =@”https://api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}“; url = string.Format(url, files.Content, files.FileSize); // 微信服务器下载录音问价的地址 string strpath = string.Empty; string savepath = string.Empty; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = "GET"; using (WebResponse wr = req.GetResponse()) { HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse(); strpath = myResponse.ResponseUri.ToString();//下载录音文件的地址 WebClient mywebclient = new WebClient(); savepath = "服务器上文件夹的路径"+ ”录音文件的名字“ + ".amr";//微信服务器下载的 录音文件保存的地址 try { mywebclient.DownloadFile(strpath, savepath);//下载录音文件 } catch (Exception ex) { } } ``` **备注:因为编码方式不同,测试的时候要在真机上测试,在微信开发者工具上会存在一定问题。** **3.1.2 录音文件格式的转化** (1) 核心工具ffmpeg.exe ,百度自己下载即可 ```csharp string outStr = ""; Process process = new Process(); try { string filepath = System.AppDomain.CurrentDomain.BaseDirectory; process.StartInfo.FileName = filepath+"ffmpeg" + "\\" + "ffmpeg.exe"; // 这里也可以指定 ffmpeg的绝对路径 process.StartInfo.Arguments = @" -i " + "下载到服务器的录音地址" + " " + (要转化到的地址) + ".mp3"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardInput = true; process.StartInfo.RedirectStandardError = true; process.Start(); process.BeginErrorReadLine(); // 开始异步读取 process.WaitForExit(); // 等待转码完成 if (process.ExitCode == 0) { outStr = process.StandardOutput.ReadToEnd(); } else { outStr = ""; } } catch (Exception ex) { outStr = ""; } finally { process.Close(); process.Dispose(); } return outStr;

(2) 利用ffmpeg.exe 获取音频文件的时长

string duration = "";//时长 try { using (Process pro = new Process()) { pro.StartInfo.UseShellExecute = false; pro.StartInfo.ErrorDialog = false; pro.StartInfo.RedirectStandardError = true; pro.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "ffmpeg" + "\\" + "ffmpeg.exe"; pro.StartInfo.Arguments = " -i " + ”要获取时长的音频文件的绝对地址“; pro.Start(); System.IO.StreamReader errorreader = pro.StandardError; pro.WaitForExit(1000); string result = errorreader.ReadToEnd(); if (!string.IsNullOrEmpty(result)) { //获取到的时长 result = result.Substring(result.IndexOf("Duration: ") + ("Duration: ").Length, ("00:00:00").Length); duration = result; } } } catch (Exception ex) { } return duration;

写在最后:本文只是列举了一下大概的实现,没有把全部代码放出来,大家可以根据核心代码自行封装即可



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3