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

独自空忆成欢 提交于 2020-12-26 03:20:02

问题


We are building a exercise app using ionic framework, which need to play multiple audio files in sequence with specific interval between each audio file. We got this working. Now we need to join the audio files into a single file.

Example: File_1 (4 mins in length), File_2 (3 mins in length). We need a new combined single audio file which should be of 10 mins length (File_1 + 3 mins silence + File_2)

Is there way to get this in a client side mobile application using angular or cordova?


回答1:


Client-side javascript cannot do that, but it's possible on server-side.


Basic technically steps:

  • send those files to server
  • server does whatever you want and sends result back

If you are using node.js it's pretty easy

  • send files to server using multer
  • modify files server-side using node-stream and send back


This article describes basic mp3 file concatenation on node.js

But if you still want client-side. Theoretically this should work.

Note, this is very hackish way, you might hit many restrictions (application speed, battery consumption, local storage limit, etc) and you still will not have single file, but single format.

  • Convert files to base64 using btoa, example

And use custom format like

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;
    }
};
  • Save it to browser by using PouchDB, it has some limits which you can read in docs
  • When you want to play it, get back CustomFile from pouchdb
  • decode those base64 to file and use window.URL.createObjectURL(formBlob); so that HTML5 Audio can play it



回答2:


You could create a cordova plugin that manage the files concat in the javascript layer but really join them in the native layer.

Other interesting question about audio merging (only in 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



来源:https://stackoverflow.com/questions/32043251/joining-multiple-audio-files-into-a-single-audio-file-in-client-side

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!