gpt4 book ai didi

web-audio-api - Web Audio API 的性能问题

转载 作者:行者123 更新时间:2023-12-02 22:00:34 26 4
gpt4 key购买 nike

我创建了一个简单的 Web Audio API 脚本,它可以流式传输本地 mp3 并具有增益控制和 3 频段均衡器。

节点的设置使得源连接到增益节点,然后切割到低通、带通和高通节点。这些节点中的每一个在连接到目的地之前都连接到增益。这是一个简单的均衡器。 (下面的图表和代码)

这在配备 i7 和 16GB RAM 的 Windows 8 台式机上运行良好,但是当我尝试在配备 Celeron 处理器和 2GB RAM 的 Acer C7 Chromebook 上运行它时,音频出现乱码。听起来好像每条分割路径都不同步。听起来节奏也加快了。您可以在下面的 YouTube 视频中看到/听到这一点。

http://youtu.be/mB3gdjUwQfw

赛扬处理器应该能够轻松处理 3 频段均衡器。我能做些什么来防止这种情况发生吗?有没有人在低端硬件上遇到过类似的问题?

一如既往地感谢您的回复。继续表现出色。

注意:如果我不拆分音频源,音频播放正常。


SimpleAudioMap

function setupChain(outNode) {
soundSource = context.createBufferSource();
soundSource.buffer = audioBuffer;

volumeNode = context.createGainNode();
volumeNode.gain.value = gainValue;

highPassFilter = context.createBiquadFilter();
highPassFilter.type = 1;
highPassFilter.frequency.value = 4000;
highPassGain = context.createGainNode();
highPassGain.gain.value = highValue;

medPassFilter = context.createBiquadFilter();
medPassFilter.type = 2;
medPassFilter.frequency.value = 2125;
medPassFilter.Q = 1.1333333333333333;
medPassGain = context.createGainNode();
medPassGain.gain.value = medValue;

lowPassFilter = context.createBiquadFilter();
lowPassFilter.type = 0;
lowPassFilter.frequency.value = 250;
lowPassGain = context.createGainNode();
lowPassGain.gain.value = lowValue;

// Wiring
volumeNode.connect(lowPassFilter);
lowPassFilter.connect(lowPassGain);
lowPassGain.connect(outNode);

volumeNode.connect(medPassFilter);
medPassFilter.connect(medPassGain);
medPassGain.connect(outNode);

volumeNode.connect(highPassFilter);
highPassFilter.connect(highPassGain);
highPassGain.connect(outNode);

return volumeNode;
}

function stopSound() {
if (source) {
source.noteOff(0);
}
}

function playSound() {
// source is global so we can call .noteOff() later.
source = context.createBufferSource();
source.buffer = audioBuffer;
source.loop = false;
source.connect(setupChain(context.destination));
source.noteOn(0); // Play immediately.
}

function initSound(arrayBuffer) {
context.decodeAudioData(arrayBuffer, function(buffer) {
// audioBuffer is global to reuse the decoded audio later.
audioBuffer = buffer;
var buttons = document.querySelectorAll('button');
buttons[0].disabled = false;
buttons[1].disabled = false;
}, function(e) {
console.log('Error decoding file', e);
});
}


var fileChangeEventListener = function(e) {
var reader = new FileReader();
reader.onload = function(e) {
initSound(this.result);
};
reader.readAsArrayBuffer(this.files[0]);
}

最佳答案

对于简单的 3 波段均衡器,我可能建议为您的双二阶滤波器尝试低架、峰值和高架。这样,您就可以消除所有这些额外的增益节点,因为这些滤波器类型接受增益值 - 而且您不必拆分信号。过滤器可以串联连接。

通过消除所有这些 split 并保持单一信号路径,您可以保证任何东西都不会不同步。

另外,当您并联连接时,您更有可能出现相位异常。 biQuad 1 正试图消除你的低点,但它们仍然存在于 biQuad 2 和 biQuad 3 中。所以你的过滤器有点互相攻击。

关于web-audio-api - Web Audio API 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996675/

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