gpt4 book ai didi

javascript - 更高效的 decodeAudioData()?

转载 作者:行者123 更新时间:2023-11-29 18:02:29 34 4
gpt4 key购买 nike

我正在使用网络音频 API 将 n channel 音频文件解码为单独的 channel ,然后将这些 channel 渲染到 Canvas 上以直观地创建频率计。

我正在使用 decodeAudioData 解码字节数组缓冲区,然后在单独的函数中分配给音频缓冲区源节点。

 // load the specified sound
function loadSound(url) {
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';

// When loaded decode the data
request.onload = function () {

// decode the data
context.decodeAudioData(request.response, function (buffer) {
// when the audio is decoded play the sound
holdingBuffer = buffer;
setupSound(buffer);
}, onError);
}
request.send();
}

我遇到的问题是,当我尝试解码大约 60mb + 的音频时,浏览器会由于内存空间不足而崩溃。decodeAudioData 函数非常耗内存!

我想知道是否有人有过更有效地解码较大音频文件的经验?

最佳答案

问题是解码 音频占用的内存量。仅作为示例,我假设您的 60MB 音频文件是 MP3。

这显然取决于比特率,但假设您的比特率为 128kbps——这是相当典型的。这意味着您要加载大约一个小时的立体声音频。

但 Web Audio API 解码为 32 位,通常为 44.1 或 48kHz(这取决于您的声卡,据我所知)。

无论如何,假设是 48kHz 的 32 位。

这意味着每个 channel 每秒 32 * 48000 位。即每分钟 32 * 48000 * 60 位,整个小时为 32 * 48000 * 60 * 60 位。当然,我们乘以二,因为我们假设是立体声。

这意味着总共有 11059200000 比特的音频数据——这是一个 1.3824GB 的音频缓冲区,需要加载到内存中。所以,基本上 - 这是大量内存。

这里确实没有简单的答案。您可以尝试在服务器上生成波形/频谱图/任何东西。或者您可以尝试分块加载音频文件,以便您可以单独(串行)处理它们并让垃圾收集。

可能还有其他解决方案,但我立即想到了这两个。

关于javascript - 更高效的 decodeAudioData()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893078/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com