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


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中对表单的基本操作代码
Jul 29 Javascript
javascript中length属性的探索
Jul 31 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
JS判断变量是否为空判断是否null
Jul 25 Javascript
JavaScript框架是什么?怎样才能叫做框架?
Jul 01 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
vue-router实现tab标签页(单页面)详解
Oct 17 Javascript
angularjs实现的购物金额计算工具示例
May 08 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
浅谈react useEffect闭包的坑
Jun 08 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/02/15 PHP
php共享内存段示例分享
2014/01/20 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
对联广告js flash激活
2006/10/19 Javascript
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
24式加速你的Python(小结)
2019/06/13 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python文字转语音实现过程解析
2019/11/12 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
企业消防安全制度
2014/02/02 职场文书
公司保密承诺书
2014/03/27 职场文书
法定代表人授权委托书
2014/04/04 职场文书
团队精神的演讲稿
2014/05/14 职场文书
应届毕业生求职信
2014/05/26 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
辞职信怎么写?
2019/05/21 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
Python turtle编写简单的球类小游戏
2022/03/31 Python