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


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 相关文章推荐
jQuery 表格工具集
Apr 25 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
JavaScript function 的 length 属性使用介绍
Sep 15 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
详解Node中导入模块require和import的区别
Aug 11 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
解决Mac安装thrift因bison报错的问题
May 17 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
Sep 13 Javascript
生成无限制的微信小程序码的示例代码
Sep 20 Javascript
JS实现简单tab选项卡切换
Oct 25 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python操作xml文件详细介绍
2014/06/09 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
试用期员工考核制度
2014/01/22 职场文书
演讲稿格式范文
2014/05/19 职场文书
诚信承诺书模板
2014/05/26 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
校园之声广播稿
2015/08/18 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
详细分析PHP7与PHP5区别
2021/06/26 PHP