小程序实现简单语音聊天 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

小程序实现简单语音聊天

发表时间:2021-1-11

发布人:葵宇科技

浏览次数:53

框架相关

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 = http://www.wxapp-union.com/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完成语音的录入和输出
  • 通过文件服务器上传语音文件

相关案例查看更多