如何用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
相关产品推荐
相关产品推荐

