假如现在有一个按钮
1
2
3
|
<div class = "inp_btn voice_btn active" id= "record" > 按住 说话 </div> |
下面就是调用微信jssdk的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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 () { } }) |
上传语音的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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自行下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
//下载语音并且转换的方法 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//下载微信语音文件 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类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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; } } } } |
文中标记红色的需要以下一个类库 放在文中最后链接里面 到时候直接放到项目里面即可(我也是找到)
总结
以上所述是小编给大家介绍的微信语音上传 下载功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!