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


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去空格处理方法
Nov 18 Javascript
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
javascript下string.format函数补充
Aug 24 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 Javascript
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
JS处理数据四舍五入(tofixed与round的区别详解)
Oct 26 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 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中的函数嵌套层数限制分析
2011/06/13 PHP
php实现图片添加水印功能
2014/02/13 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
JavaScript修改css样式style
2008/04/15 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
js读取配置文件自写
2014/02/11 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python制作简单的网页爬虫
2015/11/22 Python
python中的编码知识整理汇总
2016/01/26 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
文明倡议书
2015/01/19 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
讲座新闻稿
2015/07/18 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android