微信小程序语音(A)发给别人(B),也能播放,是需要先把语音上传到自己的服务器上才可以
小程序语音(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),也能播放,是需要先把语音上传到自己的服务器上才可以的更多相关文章
- 微信小程序开发学习资料
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 微信小程序开发初体验--教你开发小程序
微信小程序 微信小程序面世以来受到的关注颇多,直到最近我才动手尝试进行了小程序的开发,总体上感觉还是不错的,有一点不适应的就是要摆脱Web APP开发对DOM的操作.在这里我就把我是如何利用API开发 ...
- 微信小程序开发带来的思考
若无小程序开发经验,可先阅读 玩转微信小程序 一文. 微信小程序正式上线已有几周时间,相信它的开发模式你已烂熟于胸,可能你也有所疑问,我竟能用 web 语言开发出如此流畅的几乎原生体验的应用.可能你又 ...
- [干货教程]仿网易云课堂微信小程序开发实战经验
本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...
- 微信小程序开发环境搭建
关注,QQ群,微信应用号社区 511389428 微信小程序可谓是今天最火的一个名词了,一经出现真是轰炸了整个开发人员,当然很多App开发人员有了一个担心,微信小程序的到来会不会给移动端App带来一个 ...
- 如何一键式搭建微信小程序
有了微信小程序,对你到底意味着什么? 对于用户来说,再也不用担心手机的内存不够用了!一个小程序只有1M,随便卸载一个App,就能安装很多小程序! 对于老板来说,你不再需要花费数十万来去请外包公司帮你去 ...
- 微信小程序“满月”:尝鲜之后你还用过它吗?
距离 2017 年 1 月 9 日微信小程序上线,整整过去了一个月时间.和互联网时代每天出现的众多新鲜事物相似,小程序甫一诞生,立即占据了各大科技媒体网站头屏并引起社交圈的兴奋讨论.由于背靠微信,纷纷 ...
随机推荐
- redis 基础 Redis 数据类型
String(字符串) Hash(哈希) List(列表) Set(集合) zset(sorted set:有序集合)
- 如何安装部署和优化Tomcat?(Tomcat部署和优化与压测,虚拟主机配置,Tomcat处理请求的过程)
文章目录 前言 一:Tomcat安装部署 1.1:Tomcat简介 1.2:Tomcat核心组件 1.3:Tomcat处理请求的过程 1.3.1:请求过程基本解释 1.3.2:请求过程详细解释 1.4 ...
- Vulnhub_DC8 记录
目录 DC8 经验 & 总结 步骤流水 信息搜集 80端口 获取Shell 提权 DC8 经验 & 总结 对页面的功能和对应的url要敏感. 所有的功能都要测试,要雨露均沾. 提示说的 ...
- 0X01应用程序黑客技术
前言 该文章主要是讲解了常见的应用程序黑客技术基本概念,包括消息钩取,API钩取,DLL注入,代码注入 天象独行 0X01:消息钩取 原理:在我们通过键盘,鼠标等输入信息过程中,Windows会通过钩 ...
- VS误删sln项目文件怎么办
以项目名为Test为例 打开Test/Test目录下的 Test.vcxproj 文件,试着运行一下,退出后提示保存sln文件,选择一个目录即可.
- [转]使用Struts 2防止表单重复提交
转自 用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此, ...
- [转]Java监听器的原理与实现
原文链接 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用 ...
- Beautisoup库
所看视频: https://www.bilibili.com/video/av9784617/?p=34 一, Beautifulsoup是一个可以从HTML或XML文件中提取数据的Python库,它 ...
- null值可以赋给引用变量,不能给基本类型
下面正确的写法是? cbyte i=128 boolean i=null long i=0xfffL double i=0.9239d null表示没有地址:null可以赋值给引用变量,不能将null ...
- TensorFlow基础三(Scope)
用到变量名了,就涉及到了名字域的概念.通过不同的域来区别变量名,毕竟给所有变量都直接取不同名字还是有点辛苦的. 主要是name_scope和variable_scope,name_scope 作用于操 ...