簡體   English   中英

壓縮 Javascript 中的音頻緩沖區大小

[英]Compress Audio Buffer size in Javascript

我的主要目標是使用 JavaScript 壓縮音頻文件以減小其大小。 但棘手的部分是我應該為我的用例抱怨的所有限制和要求:

  • 我可以使用 Web Audio API(或基於它的庫)壓縮音頻文件嗎?
  • 理想情況下,我的代碼應該在瀏覽器和 NodeJS 中運行。 對於 Node,我已經在使用 Web 音頻 API 我依賴一個庫 - https://www.npmjs.com/package/web-audio-api 因此,理想情況下,我也應該能夠輕松地調整您為 Node 中的瀏覽器 JS 提出的解決方案。
  • 對於 Node,我不想使用 ffmpeg 或任何衍生產品,因為它們依賴於本機二進制文件來運行,當我嘗試部署到 Google Cloud 函數和 Azure 函數時,這會使運行時復雜化。
  • 目前,我將音頻內容作為AudioBuffer ,因此理想情況下,該解決方案應該能夠處理此類數據結構並且不需要文件系統交互。

在我看來,基於 Web 音頻 API AudioBuffer 的庫或用於減少數據大小的算法將是最好的解決方案,因為即使它與用於音頻的 NodeJS 庫不兼容,希望我能夠修補它以便它在我的用例。

我找到了一個音頻編碼器 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兼容;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM