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 应用程序被静音

Web Audio API - 浏览器 ogg 与 Windows Media Foundation mp3

Javascript - 从 mp3 文件录制音频

Android制作一个视频录制器

Android制作一个视频录制器