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


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 option location 页面跳转实现代码
Dec 27 Javascript
vs2003 js文件编码问题的解决方法
Mar 20 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
CSS3+JavaScript实现翻页幻灯片效果
Jun 28 Javascript
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
Apr 26 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 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
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
网上抓的一个特效
2007/05/11 Javascript
JavaScript中的类继承
2010/11/25 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
JS打印组合功能
2016/08/04 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Flask配置Cors跨域的实现
2019/07/12 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
如何将json数据转换为python数据
2020/09/04 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
linux面试相关问题
2013/04/28 面试题
简单而又朴实的个人求职信分享
2013/12/12 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
会计学自我鉴定
2014/02/06 职场文书
单位承诺书格式
2014/05/21 职场文书
教师个人考察材料
2014/12/16 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python