当前位置:   article > 正文

【JS】使用wavesurfer播放网络音频(Vue)_vue-audio-visual

vue-audio-visual
  • 最终效果

在这里插入图片描述

此处已经通过npm安装wavesurfer

  • 大致流程:
  1. 通过接口获取网络资源路径
  2. 传入该组件(也可以直接当前组件用)
  3. 初始化wavesurfer音频组件
  4. 通过fetch下载音频资源,Blob
  5. 下载完成后,通过URL.createObjectURL(blob)转为路径
  6. 通过wavesurfer.load(objectURL),初始化音频
<template>
  <div class="page">
    <div class="top">
      <div>
        <i class="el-icon-view text1" style="color: #736d6d" />
        <span class="text2">浏览量: </span>
        <span class="text3">{{ formdata.views }}</span>
      </div>
    </div>
    <div class="main">
      <div class="main-box">
        <!-- 音频插件 -->
        <div class="waveform" ref="wavesurfer"></div>
      </div>
      <div class="main-button">
        <el-button @click="start()">播放</el-button>
        <el-button @click="end()">暂停</el-button>
      </div>
    </div>
    <video v-show="false" ref="Video" class="self_video" />
  </div>
</template>

<script>
import WaveSurfer from 'wavesurfer.js'

export default {
  props: {
    // 音频路径通过父级组件传递至此(父级组件是通过接口获取的路径)
    formdata: {
      type: Object,
      default: () => {}
    }
  },
  data() {
    return {
      wavesurfer: null
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    // 初始化
    init() {
      const wavesurfer = WaveSurfer.create({
        // 元素及样式
        container: this.$refs.wavesurfer,
        height: 340,
        progressColor: '#e03639',
        waveColor: '#e7e7e7',
        cursorColor: '#FFDDDD',
        // 波峰宽度
        barWidth: 8,
        // 是否启用媒体自带的audio控件
        mediaControls: false,
        // 跨域配置
        backend: 'MediaElement',
        xhr: {
          mode: 'no-cors'
        }
      })
      // 拼接当前项目的路径
      const url = process.env.VUE_APP_HOME + this.formdata.fileUri
      fetch(url, {
        method: 'get',
        responseType: 'blob'
      })
        .then(res => {
          return res.blob()
        })
        .then(blob => {
          // 将文件保存下来,并获取路径
          const objectURL = URL.createObjectURL(blob)
          // 通过保存的路径进行访问
          wavesurfer.load(objectURL)
        })
      this.wavesurfer = wavesurfer
    },
    // 播放
    start() {
      this.wavesurfer.play()
    },
    // 暂停
    end() {
      this.wavesurfer.pause()
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 注意事项:
  1. 后端需要配置跨域!后端需要配置跨域!后端需要配置跨域!
  2. 我通过在F12的控制台,用fetch直接打开资源路径,是没有问题的

在这里插入图片描述

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

闽ICP备14008679号