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

如何用JavaScript读取WAV音频并转换为[-1,1]适配YAMNet模型

如何将WAV音频转换为YAMNet要求的[-1, 1]范围张量?

我想要使用YAMNet TensorFlow模型,但该模型要求输入的张量范围为[-1, 1]。请问如何实现将WAV音频读取并转换为该范围?

方案一

借助wavefile库简化WAV处理流程,该库会自动将音频样本归一化到[-1, 1]范围:

const readWavAudio = async () => {
  const wavfiles = await fs.readFileSync('archive/dataset/1/1_484.wav');
  const wav = new wavefile.WaveFile();
  wav.fromBuffer(wavfiles);
  wav.toSampleRate(16000); // YAMNet要求采样率为16kHz
  return wav.getSamples(false, Float32Array);
};

说明:wavefile的getSamples方法在指定返回Float32Array时,会自动将整数格式的音频样本(如16位、24位)归一化到[-1, 1],同时支持处理多声道音频,false参数表示不合并声道。

方案二

手动读取32位浮点格式的WAV文件,直接提取[-1, 1]范围的样本值:

async function readbuf_async() {
  const data = fs.readFileSync("teste.wav");
  const buffer = [];

  // 按4字节为单位读取大端浮点数据(适配32位浮点WAV格式)
  for (let o = 0; o < data.length - 4; o += 4) {
    buffer.push(data.readFloatBE(o));
  }

  return buffer;
}

说明:该方法仅适用于32位浮点格式的WAV文件,这类文件的样本值本身就处于[-1, 1]范围内。如果是其他整数格式的WAV,需要手动计算归一化(比如16位整数要除以32768)。


内容的提问来源于stack exchange,提问作者Felipe Stabel de Carvalho Schi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:26