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


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 代码优化点滴记录
Feb 19 Javascript
前后台交互过程中json格式如何解析以及如何生成
Dec 26 Javascript
JavaScript中使用Substring删除字符串最后一个字符
Nov 03 Javascript
jquery获取checkbox的值并post提交
Jan 14 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
jQuery上传多张图片带进度条样式(DEMO)
Mar 02 Javascript
简单实现js拖拽效果
Jul 25 Javascript
简单的网页广告特效实例
Aug 19 Javascript
利用JS如何计算字符串所占字节数示例代码
Sep 13 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
关于自定义Egg.js的请求级别日志详解
Dec 12 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
yii上传文件或图片实例
2014/04/01 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
jQuery实现放大镜案例
2020/10/19 jQuery
Python去掉字符串中空格的方法
2014/03/11 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Django实现跨域的2种方法
2019/07/31 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python jieba库分词模式实例用法
2021/01/13 Python
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
工厂门卫岗位职责
2013/11/25 职场文书
课外活动实习计划
2015/01/19 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL