通过FileReader API获取上传音频的长度

前言

FileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 FileBlob 对象指定要读取的文件或数据。

实现

调用FileReader API,并通过(window.AudioContext || window.webkitAudioContext)()创建音频上下文对象实现

代码示例

关键代码

const customRequest = (file) => {
  //创建FileReader
  const fileReader = new FileReader();
  //读取成功完成时触发
  fileReader.onload = (event) => {
    const arrayBuffer = event.target.result;
    //创建音频上下文对象
    const audioContext = new (window.AudioContext ||
      window.webkitAudioContext)();
    audioContext.decodeAudioData(arrayBuffer, async (buffer) => {
      const duration = Math.floor(buffer.duration); // 获取音频时长
      console.log("音频时长:", duration);
      //下面可做对音频时长限制的操作
    });
  };
  //当读取由于错误而失败时触发。
  fileReader.onerror = (error) => {
    console.error("Error reading file:", error);
  };
  //开始读取指定的 Blob 中的内容,读取完成,result 属性中将包含一个表示文件数据的 ArrayBuffer 对象
  fileReader.readAsArrayBuffer(file);
};

注意:最后一定要记得调用readAsArrayBuffe来读取内容,不然获取不到FileReader的上下文。

相关推荐
两个人的幸福online44 分钟前
记录一次 用php 调用ai用stream返回
开发语言·php
漂流瓶6666661 小时前
Scala的模式匹配变量类型
开发语言·后端·scala
夏天吃哈密瓜1 小时前
Scala中的正则表达式01
大数据·开发语言·后端·正则表达式·scala
2401_833788051 小时前
Scala的模式匹配(2)
java·开发语言
Lbs_gemini06031 小时前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
ac-er88882 小时前
GD库如何根据颜色生成纯色背景图
开发语言·php
cnsxjean2 小时前
Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架
javascript·vue.js·ui·前端框架·npm
小小优化师 anny3 小时前
JS +CSS @keyframes fadeInUp 来定义载入动画
javascript·css·css3
悠悠龙龙3 小时前
框架模块说明 #05 权限管理_03
java·开发语言·spring
阿华的代码王国4 小时前
【算法】——前缀和(矩阵区域和详解,文末附)
java·开发语言·算法·前缀和