微信小程序从后端获取音频数据流并播放

目录

1.wxml文件

2.js文件

        1.获取文件数据流

        2.播放音频

        3.暂停音频

        4.停止音频

        5.退出页面时清除缓存

        6.js文件代码整合


1.wxml文件

<!-- 在你的页面的 WXML 文件中 -->

<view>
  <button bindtap="playAudio">播放音频</button>
  <button bindtap="pauseAudio">暂停音频</button>
  <button bindtap="stopAudio">停止音频</button>
</view>

2.js文件

        1.获取文件数据流
  onLoad(options) {
    this.audioContext = wx.createInnerAudioContext();
      wx.request({
        url: '*******************',//后端获取音频的接口
        method: 'POST',
        responseType: 'arraybuffer',
        success: (res) => {
          if (res.statusCode === 200) {
            // 处理音频文件流
            this.saveAudioFile(res.data);
          } else {
            console.error('Failed to fetch audio file:', res.errMsg);
          }
        },
        fail: function (err) {
          console.error('Request failed:', err);
        }
      });
    )
    .catch(error => {
      console.error('Failed to get token:', error);
    });
  },
  saveAudioFile(arrayBuffer) {
    const fs = wx.getFileSystemManager();
    const filePath = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置文件保存路径
    
    // 直接将 ArrayBuffer 传递给 fs.writeFile
    fs.writeFile({
      filePath: filePath,
      data: arrayBuffer, // 直接使用 ArrayBuffer
      encoding: 'binary', // 指定编码方式
      success: function () {
        console.log('Audio file saved successfully:', filePath);
      },
      fail: function (err) {
        console.error('Failed to save audio file:', err);
      }
    });
  },
        2.播放音频
    /**
   * 播放音频
   */
  playAudio() {
    this.audioContext.src = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置音频源为本地文件路径
    this.audioContext.play();
  },
        3.暂停音频
    /**
   * 暂停音频
   */
  pauseAudio() {
      this.audioContext.pause();
  },
        4.停止音频
  /**
   * 停止音频
   */
  stopAudio() {
      this.audioContext.stop();
  },
        5.退出页面时清除缓存


  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载时停止音频播放并销毁音频上下文
    console.log('页面卸载,停止音频并销毁音频上下文');
    this.audioContext.stop();
    this.audioContext.destroy();
    // 获取文件系统管理器
    const fs = wx.getFileSystemManager();

    // 要删除的文件路径
    const filePath = `${wx.env.USER_DATA_PATH}/audio-file.mp3`;

    // 删除文件
    fs.unlink({
      filePath,
      success() {
        console.log('文件删除成功');
      },
      fail(err) {
        console.error('文件删除失败', err);
      }
    });
  },
        6.js文件代码整合
// pages/list/list.js
const app=getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    audioContext:null,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  
  onLoad(options) {
    this.audioContext = wx.createInnerAudioContext();
      wx.request({
        url: '**************',//后端获取音频接口
        method: 'POST',
        responseType: 'arraybuffer',
        success: (res) => {
          if (res.statusCode === 200) {
            // 处理音频文件流
            this.saveAudioFile(res.data);
          } else {
            console.error('Failed to fetch audio file:', res.errMsg);
          }
        },
        fail: function (err) {
          console.error('Request failed:', err);
        }
      });
    )
    .catch(error => {
      console.error('Failed to get token:', error);
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载时停止音频播放并销毁音频上下文
    console.log('页面卸载,停止音频并销毁音频上下文');
    this.audioContext.stop();
    this.audioContext.destroy();
    // 获取文件系统管理器
    const fs = wx.getFileSystemManager();

    // 要删除的文件路径
    const filePath = `${wx.env.USER_DATA_PATH}/audio-file.mp3`;

    // 删除文件
    fs.unlink({
      filePath,
      success() {
        console.log('文件删除成功');
      },
      fail(err) {
        console.error('文件删除失败', err);
      }
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  saveAudioFile(arrayBuffer) {
    const fs = wx.getFileSystemManager();
    const filePath = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置文件保存路径
    
    // 直接将 ArrayBuffer 传递给 fs.writeFile
    fs.writeFile({
      filePath: filePath,
      data: arrayBuffer, // 直接使用 ArrayBuffer
      encoding: 'binary', // 指定编码方式
      success: function () {
        console.log('Audio file saved successfully:', filePath);
      },
      fail: function (err) {
        console.error('Failed to save audio file:', err);
      }
    });
  },
    /**
   * 播放音频
   */
  playAudio() {
    this.audioContext.src = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置音频源为本地文件路径
    this.audioContext.play();
  },
    /**
   * 暂停音频
   */
  pauseAudio() {
      this.audioContext.pause();
  },

  /**
   * 停止音频
   */
  stopAudio() {
      this.audioContext.stop();
  },
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值