小程序实现简单语音聊天的示例代码


Posted in Javascript onJuly 24, 2020

框架相关

Demo采用Mpvue框架,后端的WebSocket采用Node.js,文件服务器直接使用的微信小程序的云开发的存储。

储备知识

  • 微信小程序录音控制器:recorderManager。
  • 微信小程序音频控制器:innerAudioContext。
  • 微信小程序WebSocket。

Node.js端WebScoket实现

// 基于WS插件
 
// 引入ws插件
var WebSocketServer = require("ws").Server;
// 实例化WebSocket
var wss = new WebSocketServer({ port: 9090 });
// 初始化客户端数组
var clients = [];
 
// 建立链接监听
wss.on('connection', function (ws) {
 clients.push(ws);
 ws.on("message", function (message) {
  clients.forEach(function (ws1) {
   if (ws1 !== ws) {
    ws1.send(message)
   }
  })
 })
})
 
// 建立链接关闭监听
ws.on("close", function (message) {
 clients = clients.filter(function (ws1) {
  return ws1 !== ws
 })
})

小程序端实现

html

<div>
 <button @click="palyAudio(value)" v-for="(value,index) in chatContent" :key="index">)))))</button>
 <button class="botom-button" @touchstart="startRecord" @touchend="stopRecord">输入语音</button>
</div>

js

export default {
 data() {
  return {
   // 存储聊天记录
   chatContent: [],
   // 录音控制器
   recorderManager: null,
   // 音频控制器
   innerAudioContext: null
  };
 },
 methods: {
  // 按下按钮开始录音
  startRecord() {
   this.recorderManager.start({
    format: "mp3"
   });
  },
  // 松开按钮停止录音
  stopRecord() {
   this.recorderManager.stop();
  },
  // 播放录音
  palyAudio(value) {
   this.innerAudioContext.src = value;
   this.innerAudioContext.play();
  }
 },
 created() {
  this.recorderManager = wx.getRecorderManager();
  this.innerAudioContext = wx.createInnerAudioContext();
  // 监听录音开始
  this.recorderManager.onStart(res => {
   console.log("recordStart");
  });
  // 监听录音结束
  this.recorderManager.onStop(res => {
   const audioName = new Date().getTime() + ".mp3";
   // 上传录音文件
   wx.cloud.uploadFile({
    cloudPath: audioName,
    filePath: res.tempFilePath,
    success: upload => {
     this.chatContent.push(upload.fileID);
     // 通过websocket传递录音连接
     wx.sendSocketMessage({
      data: upload.fileID
     });
    }
   });
  });
  // 建立websocket链接
  wx.connectSocket({
   url: "ws://yoursiteandeport",
   success: res => {
    console.log("success", res);
   },
   fail: err => {
    console.log("error", err);
   }
  });
  // websocket消息监听 
  wx.onSocketMessage(data => {
   console.log(data);
   this.chatContent.push(data.data);
  });
 }
};

结论

  • 主要通过WebSocket完成实时通讯
  • 通过微信小程序提供的API完成语音的录入和输出
  • 通过文件服务器上传语音文件

到此这篇关于小程序实现简单语音聊天的示例代码的文章就介绍到这了,更多相关小程序 语音聊天内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
调用js时ie6和ie7,ff的区别
Aug 19 Javascript
IE6 fixed的完美解决方案
Mar 31 Javascript
createElement与createDocumentFragment的点点区别小结
Dec 19 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
Vue实现根据hash高亮选项卡
May 27 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
Jul 24 #Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
Jul 24 #Javascript
javascript实现支付宝滑块验证码效果
Jul 24 #Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 #Javascript
如何通过vscode运行调试javascript代码
Jul 24 #Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
Jul 24 #Javascript
js实现验证码功能
Jul 24 #Javascript
You might like
Email+URL的判断和自动转换函数
2006/10/09 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
js实现3D旋转效果
2020/08/18 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
学雷锋宣传标语
2014/06/25 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
施工安全协议书
2016/03/22 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python