当前位置:   article > 正文

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

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

目录

1.wxml文件

2.js文件

        1.获取文件数据流

        2.播放音频

        3.暂停音频

        4.停止音频

        5.退出页面时清除缓存

        6.js文件代码整合


1.wxml文件

  1. <!-- 在你的页面的 WXML 文件中 -->
  2. <view>
  3. <button bindtap="playAudio">播放音频</button>
  4. <button bindtap="pauseAudio">暂停音频</button>
  5. <button bindtap="stopAudio">停止音频</button>
  6. </view>

2.js文件

        1.获取文件数据流
  1. onLoad(options) {
  2. this.audioContext = wx.createInnerAudioContext();
  3. wx.request({
  4. url: '*******************',//后端获取音频的接口
  5. method: 'POST',
  6. responseType: 'arraybuffer',
  7. success: (res) => {
  8. if (res.statusCode === 200) {
  9. // 处理音频文件流
  10. this.saveAudioFile(res.data);
  11. } else {
  12. console.error('Failed to fetch audio file:', res.errMsg);
  13. }
  14. },
  15. fail: function (err) {
  16. console.error('Request failed:', err);
  17. }
  18. });
  19. )
  20. .catch(error => {
  21. console.error('Failed to get token:', error);
  22. });
  23. },
  24. saveAudioFile(arrayBuffer) {
  25. const fs = wx.getFileSystemManager();
  26. const filePath = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置文件保存路径
  27. // 直接将 ArrayBuffer 传递给 fs.writeFile
  28. fs.writeFile({
  29. filePath: filePath,
  30. data: arrayBuffer, // 直接使用 ArrayBuffer
  31. encoding: 'binary', // 指定编码方式
  32. success: function () {
  33. console.log('Audio file saved successfully:', filePath);
  34. },
  35. fail: function (err) {
  36. console.error('Failed to save audio file:', err);
  37. }
  38. });
  39. },
        2.播放音频
  1. /**
  2. * 播放音频
  3. */
  4. playAudio() {
  5. this.audioContext.src = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置音频源为本地文件路径
  6. this.audioContext.play();
  7. },
        3.暂停音频
  1. /**
  2. * 暂停音频
  3. */
  4. pauseAudio() {
  5. this.audioContext.pause();
  6. },
        4.停止音频
  1. /**
  2. * 停止音频
  3. */
  4. stopAudio() {
  5. this.audioContext.stop();
  6. },
        5.退出页面时清除缓存
  1. /**
  2. * 生命周期函数--监听页面卸载
  3. */
  4. onUnload() {
  5. // 页面卸载时停止音频播放并销毁音频上下文
  6. console.log('页面卸载,停止音频并销毁音频上下文');
  7. this.audioContext.stop();
  8. this.audioContext.destroy();
  9. // 获取文件系统管理器
  10. const fs = wx.getFileSystemManager();
  11. // 要删除的文件路径
  12. const filePath = `${wx.env.USER_DATA_PATH}/audio-file.mp3`;
  13. // 删除文件
  14. fs.unlink({
  15. filePath,
  16. success() {
  17. console.log('文件删除成功');
  18. },
  19. fail(err) {
  20. console.error('文件删除失败', err);
  21. }
  22. });
  23. },
        6.js文件代码整合
  1. // pages/list/list.js
  2. const app=getApp()
  3. Page({
  4. /**
  5. * 页面的初始数据
  6. */
  7. data: {
  8. audioContext:null,
  9. },
  10. /**
  11. * 生命周期函数--监听页面加载
  12. */
  13. onLoad(options) {
  14. this.audioContext = wx.createInnerAudioContext();
  15. wx.request({
  16. url: '**************',//后端获取音频接口
  17. method: 'POST',
  18. responseType: 'arraybuffer',
  19. success: (res) => {
  20. if (res.statusCode === 200) {
  21. // 处理音频文件流
  22. this.saveAudioFile(res.data);
  23. } else {
  24. console.error('Failed to fetch audio file:', res.errMsg);
  25. }
  26. },
  27. fail: function (err) {
  28. console.error('Request failed:', err);
  29. }
  30. });
  31. )
  32. .catch(error => {
  33. console.error('Failed to get token:', error);
  34. });
  35. },
  36. /**
  37. * 生命周期函数--监听页面初次渲染完成
  38. */
  39. onReady() {
  40. },
  41. /**
  42. * 生命周期函数--监听页面显示
  43. */
  44. onShow() {
  45. },
  46. /**
  47. * 生命周期函数--监听页面隐藏
  48. */
  49. onHide() {
  50. },
  51. /**
  52. * 生命周期函数--监听页面卸载
  53. */
  54. onUnload() {
  55. // 页面卸载时停止音频播放并销毁音频上下文
  56. console.log('页面卸载,停止音频并销毁音频上下文');
  57. this.audioContext.stop();
  58. this.audioContext.destroy();
  59. // 获取文件系统管理器
  60. const fs = wx.getFileSystemManager();
  61. // 要删除的文件路径
  62. const filePath = `${wx.env.USER_DATA_PATH}/audio-file.mp3`;
  63. // 删除文件
  64. fs.unlink({
  65. filePath,
  66. success() {
  67. console.log('文件删除成功');
  68. },
  69. fail(err) {
  70. console.error('文件删除失败', err);
  71. }
  72. });
  73. },
  74. /**
  75. * 页面相关事件处理函数--监听用户下拉动作
  76. */
  77. onPullDownRefresh() {
  78. },
  79. /**
  80. * 页面上拉触底事件的处理函数
  81. */
  82. onReachBottom() {
  83. },
  84. /**
  85. * 用户点击右上角分享
  86. */
  87. onShareAppMessage() {
  88. },
  89. saveAudioFile(arrayBuffer) {
  90. const fs = wx.getFileSystemManager();
  91. const filePath = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置文件保存路径
  92. // 直接将 ArrayBuffer 传递给 fs.writeFile
  93. fs.writeFile({
  94. filePath: filePath,
  95. data: arrayBuffer, // 直接使用 ArrayBuffer
  96. encoding: 'binary', // 指定编码方式
  97. success: function () {
  98. console.log('Audio file saved successfully:', filePath);
  99. },
  100. fail: function (err) {
  101. console.error('Failed to save audio file:', err);
  102. }
  103. });
  104. },
  105. /**
  106. * 播放音频
  107. */
  108. playAudio() {
  109. this.audioContext.src = wx.env.USER_DATA_PATH + '/audio-file.mp3'; // 设置音频源为本地文件路径
  110. this.audioContext.play();
  111. },
  112. /**
  113. * 暂停音频
  114. */
  115. pauseAudio() {
  116. this.audioContext.pause();
  117. },
  118. /**
  119. * 停止音频
  120. */
  121. stopAudio() {
  122. this.audioContext.stop();
  123. },
  124. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/1019871
推荐阅读
相关标签
  

闽ICP备14008679号