34

我正在使用Recorder.jsgetUserMedia({audio:true});从浏览器中录制音频,然后将其导出为 WAV 文件,因为这是库提供的唯一选项。

1 分 20 秒的文件大小为 14.1 MB。我需要将音频上传到服务器,而且我需要快速完成。如何转换任何其他压缩格式的 WAV 音频以减小文件大小?

我不介意转换为:

  • MP3
  • 作品
  • 网络管理
  • 奥格
  • FLAC
  • 您知道的任何其他格式

如果目前无法转换为任何这些格式,我该如何在客户端压缩 WAV 文件?

PS:我做了很多搜索以找到任何在JS中转换WAV的东西,但一无所获。libmp3lame.js在 Chrome 中不起作用。

谢谢!

4

5 回答 5

32

我制作了一个录音机,可以直接从结合 RecorderJS 和 libmp3lame.js 的浏览器录制到 mp3

你可以在这里找到 gitHub 项目: https ://github.com/nusofthq/Recordmp3js

以及更详细的实现说明:http: //nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

于 2014-03-27T09:19:55.420 回答
4

您真正想要的是 mediaStream “Recording API”,目前正在开发中。在此之前,我建议在 C/C++ 源代码上使用 emscriptem,并考虑在 webworker 中运行它以避免阻塞 UI 和其他选项卡。

于 2013-07-08T15:26:36.183 回答
3

我遇到了同样的问题,并想出了一个非常快速而肮脏的解决方案:

  • 使用 zip.js压缩 wav 文件(适用于 Chrome、Firefox、Safari 6 和 Internet Explorer 10)

进一步的英特尔请参阅文档 zip.js

至少这大大减小了大小,文件大约小了 75%,所以1:4 压缩

更新:也许看看这个:https ://webrtc.github.io/samples/

它是由谷歌开发的 Chrome 和 Firefox 聊天应用程序,我假设使用一种 CC-License

于 2013-11-21T01:50:00.180 回答
2

我有一个类似的问题(也使用recorder.js),并设法使用精湛的videoconverter.js项目解决了这个问题,该项目包括使用emscripen 将ffmpeg 移植到Javascript 的端口。缺点是 ffmpeg.js 文件大约 25Mb。

我修改了 recorderWorker.js 中的现有exportWAV函数以返回 WAV(用于 HTML5<audio>播放)和包含编码 MP2 文件的 Blob:

function encodeWAV(samples) {

  var buffer = new ArrayBuffer(44 + samples.length * 2);
  var view = new DataView(buffer);

  /* ... various writing methods */

  return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) };
}

function ffmpeg_convert(buffer) {
    console.log("starting mp2 conversion");
    var args = "-i input -f mp2 output.mp2";
    var results = ffmpeg_run({
        arguments: args.split(" "),
        files: [
          {
              data: new Uint8Array(buffer),
              "name": "input"
          }
        ]
    });
    if (results) {
        var file = results[0];
        console.log("File recieved", file.name, file.data);
        return new Blob([file.data], { type: "audio/mpeg" });
    }
    return null;
}

此方法可用于将 WAV 编码为 ffmpeg 支持的任何编解码器libavcodec

于 2014-01-10T14:02:14.933 回答
1

我能够使用opus.js实现压缩,

你可以在这里找到我的实现:recordOpus,但有一个问题,我的与服务器端耦合,我使用node.js服务器....

于 2014-09-26T03:42:39.217 回答