【问题标题】:Is Node.JS audio mixing + MP3 generation possible?Node.JS 音频混合 + MP3 生成可能吗?
【发布时间】:2014-04-09 17:42:22
【问题描述】:

简而言之,我有一个网站,在该网站的客户端,用户有一个“节拍器”应用程序。用户可以打开/关闭噪音、背景节拍等,以根据我在客户端预定义的噪音、音调和曲调创建自己的自定义“歌曲”。

我需要以某种方式将他们正在制作的节拍(在 HTML5 画布中)翻译到我的服务器端(当前为 Node.JS)并输出他们创作的 MP3。

基本上,我必须以某种方式让我的服务器端后端优雅地连接 + 重叠 + 将各种较小的 MP3/wav 文件混合成一个与他们在客户端创建的节拍相匹配的 MP3 文件。然后我必须将该 MP3 返回到客户端进行下载。

谁能指出我正确的方向?

据我的研究表明,由于手头问题的复杂性,这根本不容易实现或根本不可行(即在项目的实际预算/时间限制内)。

【问题讨论】:

    标签: node.js canvas mp3 html5-audio


    【解决方案1】:

    这是可能的,并且有一些 JavaScript 音频库,但我会采取不同的方法。

    如今,Web Audio API 非常可靠。您可以让您的用户在客户端进行所有调整,然后在用户的浏览器中生成音频文件。如果您需要在服务器端获取副本,您可以将原始 PCM 上传到您的服务器(带宽密集型),或者将参数发送到服务器并重新生成文件。

    现在很遗憾,PhantomJS 不支持 Web Audio。为了生成完美的服务器端副本,我将使用一个特殊页面执行 Chrome,该页面呈现音频然后上传到本地服务器。这保证了您获得的声音输出与客户端的声音输出完全相同,并将所有繁重的工作留给已经在浏览器中实现的 Web Audio API。

    对于这样的项目,你不会找到太多现成的,但只要有一点创意,我想你会发现这并不太难。

    【讨论】:

    • 存在哪些客户端库可以让我们生成 MP3 并将其提供给那里的用户?我没有找到任何
    • 目前没有客户端 MP3 编码库。有些人使用 emscripten 尝试将 LAME 编译为 JavaScript,但据我所知,还没有人让它工作。您应该能够将 WAV 文件导出为 blob。如果您想要 MP3,则必须对该服务器端进行编码,为此我建议将 FFmpeg 作为子进程运行。
    • 所以客户端不是一个选项,显然FFMpeg是混合+输出MP3服务器端最合理的解决方案。 There is a Node.JS abstraction / implementation of FFMpeg 但它的选项显示它可以连接 MP3,但不清楚如何将 MP3 的多个通道(可能是几十个)合并到一个 MP3 中,以特定间隔启动和停止子通道输入等。 ……这真的靠谱吗?可行,是的……但似乎合理?
    • 我不是建议您使用 FFmpeg 进行混音,我是说您使用 Web Audio API 进行混音并使用 FFmpeg 将您的 WAV 转换为 MP3。而且...这些都与 Canvas 没有任何关系(除非您将 Canvas 用于您的 UI,但肯定没有任何音频与它有任何关系)。是的,这是可能的。阅读本教程,如果您在分配的学习时间内无法弄清楚,那么您就有了答案:html5rocks.com/en/tutorials/webaudio/intro
    • 有一种方法可以在客户端吐出 .WAV,然后呢?什么框架?我的问题是我找不到任何客户端库,可以让您基本上将下载的从服务器下载的小 .wav/.mp3 文件混合到单个输出中......全部在客户端......全部与花哨的混合等。输出成 .wav 与否,你会用什么来执行所述输出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2011-03-20
    • 2012-02-06
    相关资源
    最近更新 更多