首页 > 解决方案 > 在Javascript中压缩音频缓冲区大小

问题描述

我的主要目标是使用 JavaScript 压缩音频文件以减小其大小。但棘手的部分是我应该为我的用例抱怨的所有限制和要求:

在我看来,基于 Web Audio API AudioBuffer 的库或用于减少数据大小的算法将是最好的解决方案,因为即使它与用于音频的 NodeJS 库不兼容,希望我能够修补它以便它可以工作我的用例。

标签: javascriptnode.jsgoogle-chromewebaudio

解决方案


我找到了一个音频编码器 javascript 库,它可以在节点和浏览器中运行,名为lamejs.

所以我需要实现的可以如下完成:

const mp3encoder = new lamejs.Mp3Encoder(1, SAMPLE_RATE, KBPS);
let samples = audioBuffer.getChannelData(0).map(x => x * 32767.5);
const encoded = mp3encoder.encodeBuffer(samples);
mp3Data.push(encoded);
mp3Data.push(mp3encoder.flush());

请注意,您需要标准化音频音量,因为在典型的 AudioBuffer 中,数据存储为 0 和 1 之间的浮点数,这就是为什么在读取通道数据时应将其乘以 32767.5 以兼容lamejs;


推荐阅读