小程序语音(A)发给别人(B),也能播放,是需要先把语音上传到自己的服务器上才可以。

https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html

A端:

Wxml:

<button wx:if="{{selected}}" bind:touchstart="start" bind:touchend="stop" data-index="{{index}}" data-memberid="{{item.memberid}}">

按住回答

</button>

Js:

定义公用语音包组件

const recorderManager = wx.getRecorderManager();

const innerAudioContext = wx.createInnerAudioContext();

//开始录音的时候

start: function() {

const options = {

duration: 10000, //指定录音的时长,单位 ms

sampleRate: 16000, //采样率

numberOfChannels: 1, //录音通道数

encodeBitRate: 96000, //编码码率

format: 'mp3', //音频格式,有效值 aac/mp3

frameSize: 50, //指定帧大小,单位 KB

}

//开始录音

recorderManager.start(options);

recorderManager.onStart(() => {

console.log('开始录音')

});

//错误回调

recorderManager.onError((res) => {

console.log(res);

})

},

//停止录音

stop: function(e) {

var that = this;

var memberid= e.currentTarget.dataset.memberid;

recorderManager.stop();

recorderManager.onStop((res) => {

var list = that.data.vediolist;

var start = this.data.start;

var end = e.timeStamp;

var seconds = (end % (1000 * 60)) / 1000;

var shijian = seconds - start;

//这里也能按照时间显示留言宽度,暂时没做

var src = res.tempFilePath;  //语音临时文件

//先把语音上传到自己的服务器上才可以,然后把返回的语音放入数组存储,最后在一起存到数据库中的字段里

wx.uploadFile({

url: hcxcx.apiUrl.getuploadvedio,

filePath: src,

header: {

'content-type': 'multipart/form-data'

},

name: "files",

formData: {

user: 'tesdt'

},

success: function(res) {

if (res.statusCode == 200) {

var aa = {

src: res.data,

memberid: memberid

}

list.push(aa);

that.setData({

vediolist: list

})

} else {

wx.showToast({

title: res.body,

icon: 'none',

duration: 2000

});

}

},

fail: function(res) {

wx.showToast({

title: res.body,

icon: 'none',

duration: 2000

});

}

});

})

},

C#端

#region 小程序录音上传

/// <summary>

/// 小程序录音上传

/// </summary>

/// <param name="_"></param>

/// <returns></returns>

[HttpPost]

public ActionResult GetUploadVedio()

{

string ImgId = string.Empty;

string webRootPath = _hostingEnvironment.WebRootPath;

var hp = _accessor.HttpContext.Request.Form.Files[0];//和前面input的name决定这个参数

string filemd5key = Guid.NewGuid().ToString("N");

try

{

var datetimename = DateTime.Now.ToString("yyyyMMdd");

var filedic = "ResourceTemp/Vedio/" + datetimename;

string filePath = webRootPath + "\\ResourceTemp\\Vedio\\" + datetimename;

//图片默认保存路径和文件路径是不一样的

//保存文件到层级目录下

if (!Directory.Exists(filePath))

{

Directory.CreateDirectory(filePath);

}

filePath = filePath + "\\" + filemd5key + Path.GetExtension(hp.FileName);

using (FileStream fs = System.IO.File.Create(filePath))

{

hp.CopyTo(fs);

fs.Flush();

}

byte[] buffer = null;

using (FileStream fs = new FileStream(filePath, FileMode.Open))

{

buffer = new byte[fs.Length];

fs.Read(buffer, 0, buffer.Length);

}

var url = ConfigUtil.GetStr("ApiDomain");

if (!url.Contains("http"))

{

url = "http://" + url;

}

url = url + "/";

ImgId = url + filedic + "/" + filemd5key + Path.GetExtension(hp.FileName);

}

catch (Exception ex)

{

NlogUtil.wlog("GetUploadVedio", "小程序录音上传错误信息:" + ex.Message);

}

return Content(ImgId);

}

#endregion

B端

Wxml:

<view class="yuyin" bindtap="vedioplay" data-vediosrc='{{vediosrc}}'>

<image src='./../../../centent/img/yuyinshuru.png' class="yuyin_img"></image>

</view>

Js

const innerAudioContext = wx.createInnerAudioContext();

vedioplay: function(e) {

let that = this;

var src = e.currentTarget.dataset.vediosrc;

innerAudioContext.autoplay = true;

innerAudioContext.src = src;

innerAudioContext.onPlay(() => {

console.log('历史记录播放');

})

innerAudioContext.obeyMuteSwitch = false

innerAudioContext.onError((res) => {

console.log(res.errMsg)

console.log(res.errCode)

})

微信小程序语音(A)发给别人(B),也能播放,是需要先把语音上传到自己的服务器上才可以的更多相关文章

  1. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  4. 微信小程序开发初体验--教你开发小程序

    微信小程序 微信小程序面世以来受到的关注颇多,直到最近我才动手尝试进行了小程序的开发,总体上感觉还是不错的,有一点不适应的就是要摆脱Web APP开发对DOM的操作.在这里我就把我是如何利用API开发 ...

  5. 微信小程序开发带来的思考

    若无小程序开发经验,可先阅读 玩转微信小程序 一文. 微信小程序正式上线已有几周时间,相信它的开发模式你已烂熟于胸,可能你也有所疑问,我竟能用 web 语言开发出如此流畅的几乎原生体验的应用.可能你又 ...

  6. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...

  7. 微信小程序开发环境搭建

    关注,QQ群,微信应用号社区 511389428 微信小程序可谓是今天最火的一个名词了,一经出现真是轰炸了整个开发人员,当然很多App开发人员有了一个担心,微信小程序的到来会不会给移动端App带来一个 ...

  8. 如何一键式搭建微信小程序

    有了微信小程序,对你到底意味着什么? 对于用户来说,再也不用担心手机的内存不够用了!一个小程序只有1M,随便卸载一个App,就能安装很多小程序! 对于老板来说,你不再需要花费数十万来去请外包公司帮你去 ...

  9. 微信小程序“满月”:尝鲜之后你还用过它吗?

    距离 2017 年 1 月 9 日微信小程序上线,整整过去了一个月时间.和互联网时代每天出现的众多新鲜事物相似,小程序甫一诞生,立即占据了各大科技媒体网站头屏并引起社交圈的兴奋讨论.由于背靠微信,纷纷 ...

随机推荐

  1. Python - 编程技巧,语法糖,黑魔法,pythonic

    参考,搬运 http://python-web-guide.readthedocs.io/zh/latest/idiom/idiom.html 待定 1. Python支持链式比较 # bad a = ...

  2. 操作系统OS,Python - 有了GIL为什么还要threading.Lock()?

    参考: https://stackoverflow.com/questions/49859287/what-is-the-need-of-threading-lock-when-cpython-has ...

  3. JUnit + Mockito 单元测试

    原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  4. ubuntu13.10安装增强功能

    步骤: 1>cd /mnt 2> ./VBoxLinuxAdditions.run 3>设置共享文件夹share 4>访问共享文件夹cd /media/sf_share not ...

  5. 7 JavaScript函数调用&this关键字&全局对象&函数调用&闭包

    JavaScript函数有4种调用方式,每种方式的不同之处在于this的初始化 一般而言,在JavaScript中,this指向函数执行时的当前对象 如果函数不属于任何对象,那么默认为全局对象,即HT ...

  6. win10系统黑屏无法显示桌面解决

    适用情况:win10系统 黑屏无法显示出桌面但是程序能正常运行时 解决方法:win+r 调出运行窗口 运行:Explorer.exe

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:为所有表格的单元格添加边框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. C/C++ - CallBack

    这是实验楼上一个callback debug例子,我没有提交结果,但在本地上运行没有任何问题,也无警告: #include <stdio.h> #define MAX 3 typedef ...

  9. java#临时文件目录

    String tmpDir=System.getProperty("java.io.tmpdir");

  10. 设计模式课程 设计模式精讲 8-3 单例设计模式-DoubleCheck双重检查实战及原理解析

    1 课程讲解 1.1 为何要使用双重检查 1.2 双重检查的缺点 1.3 指令重排序讲解 1.4 指令重排序比喻(自己理解) 1.5 如何解决指令重排序问题 2 代码演练 2.1 代码演练1(双重检查 ...