html - 降低使用 recorderjs 创建的 WAV 文件的比特率

标签 html audio wav audio-recording recorder.js

我正在尝试使用 recorderjs在用户上传简短录音(比如 1 到十几秒长)的应用引擎网站上。我注意到我正在上传的 WAV 文件比我预期的要大得多。例如,我刚刚创建了一段大约持续 9 秒的录音,上传的 blob 为 1736769 字节,即 > 1.5 兆字节。

问题:

如何修改 recorderjs 代码(或我自己的代码——也许我使用的 recorderjs 不正确),以便我的音频 blob 具有较低的比特率?我希望 10 秒的录音安全地低于 1 MB。

我的猜测是我需要修改 here 中的 encodeWAV 函数,或者可能是 exportWAV,但我不确定如何。在 exportWAV 中删除交错缓冲区的所有其他元素是否有意义?有没有更智能的方法来做到这一点?导出的 WAV 的比特率如何取决于我的计算机的属性(例如,我的声卡的采样率)?

如果有帮助,我可以在自己的代码中添加一些详细信息。

编辑:如果你想看一个活生生的例子,安装 google chrome beta 并尝试 this page .在我的电脑上,一段 5-10 秒的录音超过 1 MB。

非常感谢,

阿德里安

最佳答案

在我的例子中,Chrome 以 96kHz 录制音频,而 Firefox 以 44.1kHz 录制音频,这会产生巨大的 WAV 文件。我在 recorderWorker.js 中实现了一个下采样功能,您可以在其中选择您想要的采样率,例如 16000。

function downsampleBuffer(buffer, rate) {
    if (rate == sampleRate) {
        return buffer;
    }
    if (rate > sampleRate) {
        throw "downsampling rate show be smaller than original sample rate";
    }
    var sampleRateRatio = sampleRate / rate;
    var newLength = Math.round(buffer.length / sampleRateRatio);
    var result = new Float32Array(newLength);
    var offsetResult = 0;
    var offsetBuffer = 0;
    while (offsetResult < result.length) {
        var nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
        var accum = 0, count = 0;
        for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {
            accum += buffer[i];
            count++;
        }
        result[offsetResult] = accum / count;
        offsetResult++;
        offsetBuffer = nextOffsetBuffer;
    }
    return result;
}

我在导出 wav 文件时调用它:

function exportWAV(rate, type) {
    var bufferL = mergeBuffers(recBuffersL, recLength);
    var bufferR = mergeBuffers(recBuffersR, recLength);
    var interleaved = interleave(bufferL, bufferR);
    var downsampledBuffer = downsampleBuffer(interleaved, rate);
    var dataview = encodeWAV(rate, downsampledBuffer, false);
    var audioBlob = new Blob([ dataview ], {
        type : type
    });

    this.postMessage(audioBlob);
}

关于html - 降低使用 recorderjs 创建的 WAV 文件的比特率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296645/

相关文章:

audio - 删除ReCaptcha中的音频?

jquery ajax 按钮 onclick 事件不起作用

javascript - 使用Web Audio API的点击声

jquery - 跨浏览器支持需要哪些音频格式?

java - 如何在Java中将播放音频保存为WAV格式

java - 是否有Java库可以通过编程方式删除.mp3音频文件的一部分?

c++ - 解释fftw的.wav数据

html - 当无序列表在页面上居中时如何左对齐列表项?

jquery - 除第 1 段外的所有段落环绕 Div

html - 如何在 HTML 中获取加密的图像