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


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 输出内容到新窗口具体实现代码
May 31 Javascript
js猜数字小游戏的简单实现代码
Jul 02 Javascript
基于jquery和svg实现超炫酷的动画特效
Dec 09 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
js定义类的几种方法(推荐)
Jun 08 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
javascript 正则表达式分组、断言详解
Apr 20 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
浅谈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代码技巧的小结
2013/06/02 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JSON取值前判断
2014/12/23 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python中日期和时间格式化输出的方法小结
2015/03/19 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python3实现逐字输出的方法
2019/01/23 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
机关节能减排实施方案
2014/03/17 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
房产公证书格式
2015/01/26 职场文书
公司放假通知怎么写
2015/04/15 职场文书
个人承诺书格式范文
2015/04/29 职场文书
上学路上观后感
2015/06/16 职场文书
教学反思怎么写
2016/02/24 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫