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


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 相关文章推荐
ie和firefox中img对象区别的困惑
Dec 27 Javascript
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
js 删除数组的几种方法小结
Feb 21 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
Mar 01 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
Jul 10 Javascript
JavaScript定时器设置、使用与倒计时案例详解
Jul 08 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
Feb 05 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 危险函数解释 分析
2009/04/22 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python复制文件操作实例详解
2015/11/10 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
师范生的个人求职信范文
2014/01/04 职场文书
《春天来了》教学反思
2014/04/07 职场文书
给老婆的保证书范文
2014/04/28 职场文书
计划生育证明格式范本
2014/09/12 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
趣味运动会标语口号
2015/12/26 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python