前端读取wav音频,采样频率,采样精度等参数

注释: 我这边是读取的本地文件的采样频率,采样精度等参数,框架用的是vue。话不多说直接上代码。

1. 将input:file获取到的文件转换为url

// --- 将文件转换为可读url链接
// --- file:本地读取的文件对象
getObjectURL(file) {
  var url = null;
    if (window.createObjectURL != undefined) {
        // basic
        url = window.createObjectURL(file);
     } else if (window.URL != undefined) {
        // mozilla(firefox)
        url = window.URL.createObjectURL(file);
     } else if (window.webkitURL != undefined) {
        // webkit or chrome
       url = window.webkitURL.createObjectURL(file);
     }
      return url;
 }

2. 使用fetch读取文件,在解析需要的数据

// --- 音频处理
    async handleVideo(file) {
      //也可以使用错误处理
      try {
        let url = this.getObjectURL(file.file);
        const res = await fetch(url);
        const arrayBuffer = await res.arrayBuffer(); // byte array字节数组
        let intArr = new Int8Array(arrayBuffer);
        let channelArr = intArr.slice(22, 24);
        let codeArr = intArr.slice(20, 22);
        let sampleRateArr = intArr.slice(24, 28);
        let bitPerSampleArr = intArr.slice(34, 36);
        let type = String.fromCharCode.apply(null, intArr.slice(8, 16));
        let numberOfChannels =
          (channelArr[0] & 0xff) | ((channelArr[1] & 0xff) << 8);
        let code = (codeArr[0] & 0xff) | ((codeArr[1] & 0xff) << 8);
        let sampleRate =
          (sampleRateArr[0] & 0xff) |
          ((sampleRateArr[1] & 0xff) << 8) |
          ((sampleRateArr[2] & 0xff) << 16) |
          ((sampleRateArr[3] & 0xff) << 24);
        let bitPerSample =
          (bitPerSampleArr[0] & 0xff) | ((bitPerSampleArr[1] & 0xff) << 8);
        // 不可删除提示消息 ------
        console.log(
          "格式:" +
            type +
            " 声道数:" +
            numberOfChannels +
            " 编码:" +
            code +
            " 采样率:" +
            sampleRate +
            " 采样位数:" +
            bitPerSample
        );
      } catch (e) {
        console.log(e);
      }
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值