Vue使用Vue-APlayer实现语音播放、下载功能

html模块 

<template>
  <div class="page-content voiceSettings">
    <div class="page-content variableManage">
        <Button class="try-btn" v-if="!playing" type="primary" @click="playVideo()">试听</Button>
        <Button class="try-btn" v-else-if="playing>0" disabled type="primary">试听</Button>
        <Button class="stop-btn" v-else icon="md-pause" type="primary" @click="stopPlayVideo">停止</Button>
    </div>
    <aplayer
      ref="audio"
      id="audio"
      :music="musicAll"
      :controls="false"
      :autoplay="false"
      :mini="true"
      @ended="playEndVideo"
    ></aplayer>
</div>
<script>
import './index.scss'
import Aplayer from 'vue-aplayer'
// import utils from '@/libs/utils.js'
import { setTimeout } from 'timers'
export default {
  name: 'voiceSettings',
  data () {
    return {
      record: '',
      recordType: [],
      voice: '',
      volume: 50,
      voiceSpeed: 0,
      voiceType: [],
      musicAll: { src: '#' },
      playing: 0,
      isPlay: false,
    }
  },
  components: {
    Aplayer
  },
  created () {
    this.init()
  },
  methods: {
    //下载事件封装
    downLoadBlob (blob, filename = '') {
      let a = document.createElement('a')
      a.download = filename
      let url = window.URL.createObjectURL(blob)
      a.href = url
      a.click()
      a.remove()
      window.URL.revokeObjectURL(url)
    },
    getVoiceFromText (value) {
      let params = {
        volume: this.volume,
        speaker: this.voice,
        recordName: this.record,
        voiceSpeed: this.voiceSpeed,
        text: this.example
      }
      this.$api.getVoiceFromText(params, { responseType: 'blob' }).then(res => {
        //这里是下载逻辑
        if (value === 1) {
          // utils.downLoadBlob(res.file, res.filename)
           this.downLoadBlob(res.file, res.filename)
        } else {
           //这里是播放逻辑
          let src = window.URL.createObjectURL(res.file)
          this.musicAll = { src }
          if (this.musicAll.src.length > 1) {
            setTimeout(() => {
              this.$refs.audio.play()
            }, 150)
          }
        }
      }).catch(res => {
        console.log(res)
      })
    },
    playVideo: utils.debounce(async function (wordsFileId) {
      let vm = this
      this.playing = wordsFileId || -1
      this.getVoiceFromText(vm)
    }, 500),
    stopPlayVideo () {
      this.playing = 0
      this.$refs.audio.pause()
    },
    playEndVideo () {
      this.playing = 0
    },
    download () {
      this.getVoiceFromText(1)
    }
  }
}
</script>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值