在客户端将多个音频文件合并为一个音频文件

Joining multiple audio files into a single audio file in client side

我们正在使用 ionic 框架构建一个练习应用程序,它需要按顺序播放多个音频文件,每个音频文件之间有特定的间隔。我们得到了这个工作。现在我们需要将音频文件合并为一个文件。

示例:File_1(长度为 4 分钟),File_2(长度为 3 分钟)。我们需要一个新的组合单一音频文件,长度应为 10 分钟 (File_1 + 3 分钟静音 + File_2)

有没有办法使用 angular 或 cordova 在客户端移动应用程序中获取此信息?

客户端javascript不能这样做,但在服务器端可以。


基本技术步骤:

  • 将这些文件发送到服务器
  • 服务器做任何你想做的事并将结果发回

如果您使用的是 node.js 就很简单了

  • 使用multer
  • 发送文件到服务器
  • 使用 node-stream 在服务器端修改文件并发回


article 描述了 node.js

上的基本 mp3 文件串联

但是如果你仍然想要客户端。理论上这应该有效。

请注意,这是一种非常骇人听闻的方式,您可能会遇到许多限制(应用程序速度、电池消耗、本地存储限制等)并且您仍然不会拥有单一文件,而是单一格式。

  • 使用 btoa,
  • 将文件转换为 base64

并使用像

这样的自定义格式
var CustomFile = function(array_of_base64_files){
    var prepared_files = [];
    for (var i = 0; i < array_of_base64_files.length; i++) {
        var file = array_of_base64_files[i];
        prepared_files.push({
            created: Date.now(),
            order: i,
            base64: file
        });
    };
    this.export = function(){
        return prepared_files;
    }
};
  • 使用 PouchDB 将其保存到浏览器,它有一些限制,您可以在文档中阅读
  • 想玩的时候从pouchdbCustomFile回来
  • 将那些base64解码成文件并使用window.URL.createObjectURL(formBlob);以便HTML5音频可以播放它

您可以创建一个 cordova 插件来管理 javascript 层中的文件连接,但实际上将它们加入本机层。

关于音频合并的其他有趣问题(仅在 Android 中):

  • Android concat 2 audio (wav or mp3) files

  • How to merge two mp3 files into one (combine/join)

  • Concatenate two audio files and play resulting file