压缩 Javascript 中的音频缓冲区大小
Compress Audio Buffer size in Javascript
我的主要目标是通过 JavaScript 压缩音频文件以减小其大小。但棘手的部分是我应该为我的用例抱怨的所有限制和要求:
- 我可以使用 Web Audio API(或基于它的库)压缩音频文件吗?
- 理想情况下,我的代码应该 运行 在浏览器和 NodeJS 中。对于 Node,我已经在使用 Web Audio API,我依赖一个库 - https://www.npmjs.com/package/web-audio-api 来提供支持;所以理想情况下,我也应该能够轻松地调整您为 Node 中的浏览器 JS 提出的解决方案。
- 对于 Node,我不想使用 ffmpeg 或任何衍生产品,因为它们依赖于 运行 的本机二进制文件,这使我尝试部署到 [=30] 的 运行 时间变得复杂=] 云函数和 Azure Functions。
- 目前我将音频内容作为 AudioBuffer,因此理想情况下,该解决方案应该能够处理此类数据结构,并且不需要文件系统交互。
在我看来,基于 Web Audio API AudioBuffer 的用于减少数据大小的库或算法将是最好的解决方案,因为即使它与音频的 NodeJS 库不兼容,希望我会能够对其进行修补,使其适用于我的用例。
我找到了一个音频编码器 javascript 库,它在 Node 和浏览器中都可以工作,叫做 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
;
我的主要目标是通过 JavaScript 压缩音频文件以减小其大小。但棘手的部分是我应该为我的用例抱怨的所有限制和要求:
- 我可以使用 Web Audio API(或基于它的库)压缩音频文件吗?
- 理想情况下,我的代码应该 运行 在浏览器和 NodeJS 中。对于 Node,我已经在使用 Web Audio API,我依赖一个库 - https://www.npmjs.com/package/web-audio-api 来提供支持;所以理想情况下,我也应该能够轻松地调整您为 Node 中的浏览器 JS 提出的解决方案。
- 对于 Node,我不想使用 ffmpeg 或任何衍生产品,因为它们依赖于 运行 的本机二进制文件,这使我尝试部署到 [=30] 的 运行 时间变得复杂=] 云函数和 Azure Functions。
- 目前我将音频内容作为 AudioBuffer,因此理想情况下,该解决方案应该能够处理此类数据结构,并且不需要文件系统交互。
在我看来,基于 Web Audio API AudioBuffer 的用于减少数据大小的库或算法将是最好的解决方案,因为即使它与音频的 NodeJS 库不兼容,希望我会能够对其进行修补,使其适用于我的用例。
我找到了一个音频编码器 javascript 库,它在 Node 和浏览器中都可以工作,叫做 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
;