我问是因为我在任何地方都找不到答案。我已经成功实现了RecorderJS,以便在 JS 中记录麦克风输入。但是,录制的文件是 WAV,这会导致文件很大。我正在寻找一种将 JS 直接录制到 MP3 的方法,或者以某种方式将这些位编码为 MP3 而不是 WAV。
怎么做到呢?是否有可以做到这一点的 Web 音频 API 功能或某种 JS MP3 编码器?
我问是因为我在任何地方都找不到答案。我已经成功实现了RecorderJS,以便在 JS 中记录麦克风输入。但是,录制的文件是 WAV,这会导致文件很大。我正在寻找一种将 JS 直接录制到 MP3 的方法,或者以某种方式将这些位编码为 MP3 而不是 WAV。
怎么做到呢?是否有可以做到这一点的 Web 音频 API 功能或某种 JS MP3 编码器?
我见过的唯一 Javascript MP3 编码器是https://github.com/akrennmair/libmp3lame-js,这是一个使用 emscripten 的端口。它应该很慢,我从未使用过它。
我不知道任何本机编写的 Javascript MP3 编码器,并且 Web 音频 API 不涵盖编码。
有一个用纯 javascript 编写的库,称为 lamejs。从原始音频编码 mp3。它比 libmp3lame 的 emscripten 编译快得多。https://github.com/zuker/lamejs
示例用法:
lib = new lamejs();
mp3encoder = new lib.Mp3Encoder(1, 44100, 128); //mono 44.1khz encode to 128kbps
samples = new Int16Array(44100); //one second of silence
var mp3 = mp3encoder.encodeBuffer(samples); //encode mp3
我对这个问题和现有的解决方案感到沮丧,所以我想出了一些更简单的方法:
https://github.com/sb2702/audioRecord.js
用法
创建一个记录器对象(异步,因为需要用户权限)
Recorder.new(function(recorder){
});
开始录制
recorder.start();
停止录制
recorder.stop();
导出为 mp3
recorder.exportMP3(function(mp3Blob){
console.log("Here is your blob: " + URL.createObjectURL(mp3Blob));
});
主要基于 RecorderJS,但改变了一些东西以导出到 mp3 文件,并且不必使用 AudioContext / navigator.getUs
要使用 javascript 录制 mp3 而无需使用任何其他框架使用 web worker,您可以使用此项目:https ://github.com/nusofthq/Recordmp3js ,此处也有很好的解释:
http://audior.ec/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/
有了这个,还可以写入 .mp3 文件并使其可下载。
目前只有 Firefox 支持编码成更小的格式:
Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Not supported 25.0 (25.0) Not supported Not supported Not supported
AFAIK 仅支持 OGG。但是OGG比WAV好。