如何在 JS 中剪切音频 mp3 Blob

How to cut a Audio mp3 Blob in JS

我一直在寻找在 Js 中剪切音频 blob,return 剪切 blob。

Blob 是使用 WebAudioRecorder.js 和您电脑的麦克风注册的。

我已经找到这个 repo:mp3-cutter,但它是用 node.js 编写的,并且需要访问文件系统。

我也找到了这个:audio-cutter,但是它有一个 UI。

我探索了多种解决方案,但没有找到任何简单的解决方案。

在分析录音时,我发现用麦克风注册的mp3有一个1024位的头。使用这个,基于this,我写了一点Js函数:

/**
 * params:
 *     params.src: Blob Object
 *     params.start: start time in sec
 *     params.end: end time in sec
 *     params.bitrate: in kbps
 */
function cutter(params) {
        let cuttedBlob;

        if (!params.src || params.start == null || params.end == null)
            throw 'Invalid parameters! ';
        
        if (params.start > params.end)
            throw 'Start is bigger than end! ';
        
        let kbps;
        if (!params.bitrate)
        {
            console.log("Checks have been done");
            console.log(params.src);
            var kbit = params.src.size / 128;
            console.log("bitrate: " + kbit);
            kbps= Math.ceil(Math.round(kbit / 204) / 16) * 16;
            console.log(kbps + "kbps");
        }
        else
            kbps = params.bitrate;
        
        cuttedBlob = params.src.slice(1024 + (params.start * kbps), params.end * kbps, "audio/mpeg3");
        return cuttedBlob;
}

但是好像不行。

我遗漏了什么?

提前致谢!

好的,我知道了

您需要将 blob 转换为 ArrayBuffer,然后转换为 AudioBuffer,剪切它,然后使用像 mp3-lame-encoder-js

这样的编码器重新编码

为了提供帮助,我编写了一个名为 simple-mp3-cutter

的小库