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


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 相关文章推荐
popdiv
Jul 14 Javascript
JS学习之一个简易的日历控件
Mar 24 Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
基于jQuery的图片大小自动适应实现代码
Nov 17 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
Jul 16 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
详解webpack-dev-server的简单使用
Apr 02 Javascript
Vue通过ref父子组件拿值方法
Sep 12 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
JS实现的字符串数组去重功能小结
Jun 17 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
JS性能优化实现方法及优点进行
Aug 30 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
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python实现简单的文字识别
2018/11/27 Python
python移位运算的实现
2019/07/15 Python
利用Python检测URL状态
2019/07/31 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
学术会议邀请函范文
2014/01/22 职场文书
售房协议书范本2014
2014/10/23 职场文书
2014年化验员工作总结
2014/11/18 职场文书
人与自然观后感
2015/06/16 职场文书
公司保洁员管理制度
2015/08/04 职场文书
暑假打工感想
2015/08/07 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers