繁体   English   中英

在客户端JavaScript中将WAV转换为任何压缩音频格式

[英]Converting WAV to any compressed audio format in client-side JavaScript

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

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

我不介意转换为:

  • MP3
  • 作品
  • WebM的
  • 奥格
  • FLAC
  • 您知道的任何其他格式

如果现在没办法转换为这些格式中的任何一种,我如何压缩客户端上的WAV文件?

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

谢谢!

我已经制作了一个录音机,可以直接从浏览器中记录到MP3,结合了RecorderJS和libmp3lame.js

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

以及对实施的更详细解释: http//nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

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

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

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

进一步的英特尔见文档zip.js

至少这会减小很多尺寸,文件大约小于75%,因此1:4压缩

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

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

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

我修改了exportWAV中的现有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任何编解码器

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM