位置:首页 > web前端 > vue

vue根据amr格式音频链接地址实现音频文件的播放 暂停等功能

dearweb 发布:2022-03-02 08:56:30阅读:

不少前端开发的人员应该都知道,web端开发的时候,audio对amr文件不能直接读取播放暂停等,这时候需要我们处理一下,如何进行操作,本文是小编的亲身踩坑体验,现分享给大家。

首先我们需要安装引入库 BenzAMRRecorder

这依赖不懂得小伙伴,可以去npm官网看看

npm i BenzAMRRecorder

可能会多次用到,小编就封装了一下

export function readAudio(audioUrl: string) {

  // audioUrl 音频文件地址
  
  var xhr = new XMLHttpRequest();
  xhr.open('GET', audioUrl);
  xhr.responseType = 'blob'; // 这里的类型一定是 blob 文件类型
  xhr.send();
  xhr.onload = function () {
    console.log(xhr.response);
    let blob = new Blob([xhr.response])
    let amr = new BenzAMRRecorder()
    amr.initWithBlob(blob).then(function () {
      amr.play();
      console.log(amr.getDuration(), 55555)
    });
    amr.onEnded(function () {
      alert('播放完毕');
    })
  };
}

以上就是文件获取的基本方法下面这个案列,看得懂可以看下,看不懂就私聊我,哈哈O(∩_∩)O哈哈~

<template>
  <div class="audio-box">
    <!-- <audio id="wrapp_aud">
      <source
        src="http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=10&text='+ttsText+'"
        type="audio/mpeg"
      />';
    </audio>-->
    <audio v-if="audioUrl" :src="audioUrl" controls class="content-audio">语音</audio>
    <el-upload
      class="upload-demo"
      action="https://jsonplaceholder.typicode.com/posts/"
      :before-upload="handleChange"
    >
      <el-button type="primary">Click to upload</el-button>
      <template #tip>
        <div class="el-upload__tip">jpg/png files with a size less than 500kb</div>
      </template>
    </el-upload>
    <!-- <button @click="fileFuc">下载音频</button> -->
  </div>
</template>
<script lang='ts'>
import {
  defineComponent, onMounted, reactive, toRefs
} from 'vue'
// import {
//   readAudio
// } from '@/utils/getAudio/index'
export default defineComponent({
  name: 'lostTrack',
  setup() {
    const state = reactive({
      audioUrl: '',
    })

    // const fileFuc = () => {
    //   readAudio('amr音频地址')
    // }

    // const fileFuc = () => {
    //   var xhr = new XMLHttpRequest();
    //   xhr.open('GET', 'amr音频地址');
    //   xhr.responseType = 'blob';
    //   xhr.send();
    //   xhr.onload = function () {
    //     console.log(xhr.response);
    //     let blob = new Blob([xhr.response])
    //     let amr = new BenzAMRRecorder()
    //     amr.initWithBlob(blob).then(function () {
    //       amr.play();
    //       console.log(666)
    //     });
    //     // var reader = new FileReader();
    //     // reader.readAsDataURL(blob);
    //     // reader.onload = function () {
    //     //   console.log(reader.result, blob);
    //     //   let lenBase = reader.result
    //     //   let ddurl = dataURLtoBlob(lenBase)
    //     //   state.audioUrl = URL.createObjectURL(ddurl)
    //     //   console.log(state.audioUrl, '99999', ddurl)
    //     //   let amr = new BenzAMRRecorder()
    //     //   amr.initWithBlob(ddurl).then(function () {
    //     //     amr.play();
    //     //     console.log(666)
    //     //   });
    //     // };
    //   };
    // }


    // const dataURLtoBlob = (dataurl: any) => {

    //   var arr = dataurl.split(','),
    //     mime = arr[0].match(/:(.*?);/)[1],
    //     bstr = atob(arr[1]),
    //     n = bstr.length,
    //     u8arr = new Uint8Array(n);
    //   while (n--) {
    //     u8arr[n] = bstr.charCodeAt(n);
    //   }
    //   console.log(arr)
    //   return new Blob([u8arr], { type: mime });
    // }

    // const handleChange = (file: any) => {
    // console.log(file)
    // var reader = new FileReader();
    // reader.readAsDataURL(file);
    // reader.onload = function () {
    //   console.log(reader.result);
    //   let lenBase = reader.result
    // };
    // let url = new File([file], 'test.mp3', { type: 'audio/mp3', lastModified: Date.now() })
    // state.audioUrl = URL.createObjectURL(url)
    // console.log(state.audioUrl, 'state.audioUrl', url)
    // }


    onMounted(() => {

    })
    return {
      ...toRefs(state),
      // handleChange,
      // fileFuc
    }
  }
})
</script>
<style lang='scss' scoped>
</style>

以上就是前端实现amr音频文件播放的过程,希望可以帮助各位小伙伴喔!!!

24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看