【问题标题】:Downsampling audio in javascript在javascript中对音频进行下采样
【发布时间】:2026-01-30 20:05:01
【问题描述】:

我想在 javascript 中对音频缓冲区进行下采样。我正在使用 OfflineAudioContext,但输出音频质量明显低于原始音频(44100Hz)。是否有任何解决方案可以在 javascript 中实现更高质量的音频重采样:

var sampleRate = 44100;
var outSampleRate = 16000;
var durationInSamples = audioBuffer441k.length;
var o = new OfflineAudioContext(1, durationInSamples*outSampleRate/sampleRate, outSampleRate);
var b = o.createBuffer(1, durationInSamples, sampleRate);

var buf = b.getChannelData(0);
for (var i = 0; i < durationInSamples; i++) {
   buf[i] = audioBuffer441k[i];
}

var source = o.createBufferSource();
source.buffer = b;
source.connect(o.destination);
source.start(0);
o.startRendering();
o.oncomplete = function(audiobuffer16k) {
  console.log("done resampling!!");
  console.log(audiobuffer16k.renderedBuffer);
  //do something with resampled audio
}

【问题讨论】:

标签: javascript audio audiocontext


【解决方案1】:

直接插值算法不足以实现合格/无损转换。线性插值几乎杀死了波形。这就像向下投射一个对象。您需要一个支持正弦/余弦曲线的重采样器 非线性插值,但现在很难找到 js 解决方案,除非有人实施强大的解决方案并分享。

尝试以您希望的频率捕获数据。重新采样总是会降低质量(尤其是在纯 javascript 代码中)

看看 XAudioJS 中基于线性权重的插值重采样: https://*.com/a/30032095/5896342

【讨论】:

    最近更新 更多