You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript获取音频文件sample rate(采样率)并解决返回固定值问题

问题分析
  • 你当前代码拿到固定采样率的核心原因是 Web Audio API 中的 decodeAudioData 存在重采样默认逻辑:该方法会自动将所有输入音频重采样为当前 AudioContext 绑定的系统音频输出设备的采样率,因此返回值永远和你的设备采样率一致,和源文件无关。
可行解决方案

有两类实现方案可以拿到源文件的真实采样率:

方案1:直接解析音频文件二进制头(推荐)

不需要依赖任何第三方库,也不需要加载完整音频文件,仅读取文件头部的元数据字段即可获得原始采样率,性能高、无重采样问题。
以下是支持WAV格式的示例代码,可根据需求扩展MP3、AAC等其他格式的解析逻辑:

function getRawSampleRate(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    // 仅读取WAV文件头的44字节,无需加载全量文件
    reader.readAsArrayBuffer(file.slice(0, 44));
    reader.onload = () => {
      const dataView = new DataView(reader.result);
      // 校验WAV文件标识
      const head1 = dataView.getUint32(0, false);
      const head2 = dataView.getUint32(8, false);
      if (head1 !== 0x52494646 || head2 !== 0x57415645) {
        return reject(new Error('当前仅支持WAV格式,可扩展其他格式解析逻辑'));
      }
      // 读取WAV头中24-27字节的采样率字段(小端序)
      const sampleRate = dataView.getUint32(24, true);
      resolve(sampleRate);
    };
    reader.onerror = reject;
  });
}

// 调用方式
getRawSampleRate(e.files[0])
  .then(rate => console.log('源文件采样率:', rate))
  .catch(err => console.log(err));

不同音频格式的采样率存储位置可参考对应格式的官方规范,按需补充解析逻辑即可覆盖所有常用音频格式。

方案2:使用前端音频元数据解析库

如果需要快速支持多格式解析,可以直接使用成熟的前端音频元数据解析工具,这类工具底层也是通过二进制解析文件头实现,不会触发Web Audio API的重采样逻辑,适配性更好。

内容的提问来源于stack exchange,提问作者phpLover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:54:08