Web Audio API - 录制到 MP3?
Posted
技术标签:
【中文标题】Web Audio API - 录制到 MP3?【英文标题】:Web Audio API - record to MP3? 【发布时间】:2013-05-28 17:11:33 【问题描述】:我问是因为我在任何地方都找不到答案。 我已经成功实现了RecorderJS,以便在 JS 中记录麦克风输入。但是,录制的文件是 WAV,这会导致文件很大。我正在寻找一种使用 JS 直接录制到 MP3 的方法,或者以某种方式将这些位编码为 MP3 而不是 WAV。
怎么做?是否有可以做到这一点的 Web 音频 API 功能或某种 JS MP3 编码器?
【问题讨论】:
我只知道相反的解码方式,即从 MP3 到 WAV - github.com/audiocogs/mp3.js。您可能需要深入研究github.com/kripken/emscripten 才能在 JS 中获得 wav 到 mp3 编码器。 谢谢,我正在研究 Emscripten,但我仍然看不出它有什么帮助。 你需要一些 C 编写的 wav-mp3 解码器,然后在浏览器中将 wav 解码为 mp3 :) 【参考方案1】:我见过的唯一 javascript MP3 编码器是 https://github.com/akrennmair/libmp3lame-js,这是一个使用 emscripten 的端口。应该很慢,我没用过。
我不知道有任何原生编写的 Javascript MP3 编码器,并且编码不包含在 Web Audio API 中。
【讨论】:
【参考方案2】:有一个用纯 javascript 编写的库,称为 lamejs。从原始音频编码 mp3。它比 libmp3lame 的 emscripten 编译快得多。 https://github.com/zhuker/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
【讨论】:
lamejs 对我来说效果很好。它似乎可以毫不费力地跟上实时,消除了对工作线程的需求。我在my site创建了一个测试页面,里面有详细的解释。【参考方案3】:我对这个问题以及现有的解决方案感到沮丧,所以我想出了一些更简单的方法:
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
【讨论】:
【参考方案4】:我找到了一个带有现场演示的不错的库:MediaStreamRecorder
这里有一个演示:Audio Recording
RecordRTC 也很有用,但 MSR 似乎更容易开始。
【讨论】:
【参考方案5】:目前只有 Firefox 支持编码成更小的格式:
http://w3c.github.io/mediacapture-record/MediaRecorder.html https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder
Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Not supported 25.0 (25.0) Not supported Not supported Not supported
AFAIK 仅支持 OGG。但 OGG 比 WAV 更好。
【讨论】:
【参考方案6】:要使用 javascript 录制 mp3,而不使用任何其他框架,使用 web worker,您可以使用这个项目:https://github.com/nusofthq/Recordmp3js,这里也有很好的解释:
http://audior.ec/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/
这样,还可以写入 .mp3 文件并使其可下载。
【讨论】:
以上是关于Web Audio API - 录制到 MP3?的主要内容,如果未能解决你的问题,请参考以下文章
是否有抽象 Web Audio API 和 Mozilla Audio Data API 以读取原始音频(MP3,ogg)的库
开始录制时,使用 Media API 和 Web Audio API 的 PhoneGap 应用程序被静音