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


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 相关文章推荐
angularJS 中input示例分享
Feb 09 Javascript
javascript中的正则表达式使用指南
Mar 01 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 Javascript
JavaScript数据结构与算法之集合(Set)
Jan 29 Javascript
微信小程序Redux绑定实例详解
Jun 07 Javascript
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
vue获取dom元素注意事项
Dec 28 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
Jun 24 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 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
表单复选框向PHP传输数据的代码
2007/11/13 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
jquery 学习之二 属性(类)
2010/11/25 Javascript
浅说js变量
2011/05/25 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
对比分析json及XML
2014/11/28 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
详解vue-router传参的两种方式
2018/09/10 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python 实现选择排序的算法步骤
2018/04/22 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
python的help函数如何使用
2020/06/11 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
车间主管岗位职责
2013/11/14 职场文书
财务管理专业推荐信
2013/11/19 职场文书
聘用意向书
2014/07/29 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Python装饰器详细介绍
2022/03/25 Python