如何在 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
的小库
我一直在寻找在 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
的小库