PhoneGap смешивания аудио файлов

Я создаю приложение для караоке, используя PhoneGap для Ios.

У меня есть аудио файлы в папке www / assets, которые я могу воспроизвести с помощью функции media.play ()

Это позволяет пользователю слушать минусовку. Во время воспроизведения мультимедиа другой экземпляр Media выполняет запись.

Когда запись закончится, мне нужно положить файл записи голоса на минусовку, и я понятия не имею, как мне поступить.

Один из подходов, который, как мне показалось, может сработать, - это использовать WEb Audio API - у меня есть следующий код, который я взял изHTML5 Скалы Который загружает два файла в AudioContext и позволяет мне воспроизводить оба одновременно. Однако я хотел бы записать два буфера в один файл .wav. Есть ли способ объединить source1 и source2 в один новый файл?

var context;
var bufferLoader;

function init() {
    // Fix up prefixing
    window.AudioContext = window.AudioContext || window.webkitAudioContext;
    context = new AudioContext();

    bufferLoader = new BufferLoader(
        context,
        [
            'backingTrack.wav',
            'voice.wav',
        ],
        finishedLoading
    );

    bufferLoader.load();
}

function finishedLoading(bufferList) {
    // Create two sources and play them both together.
    var source1 = context.createBufferSource();
    var source2 = context.createBufferSource();
    source1.buffer = bufferList[0];
    source2.buffer = bufferList[1];

    source1.connect(context.destination);
    source2.connect(context.destination);
    source1.start(0);
    source2.start(0);
}


function BufferLoader(context, urlList, callback) {
    this.context = context;
    this.urlList = urlList;
    this.onload = callback;
    this.bufferList = new Array();
    this.loadCount = 0;
}

BufferLoader.prototype.loadBuffer = function(url, index) {
    // Load buffer asynchronously
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.responseType = "arraybuffer";

    var loader = this;

    request.onload = function() {
        // Asynchronously decode the audio file data in request.response
        loader.context.decodeAudioData(
            request.response,
            function(buffer) {
                if (!buffer) {
                    alert('error decoding file data: ' + url);
                    return;
                }
                loader.bufferList[index] = buffer;
                if (++loader.loadCount == loader.urlList.length)
                    loader.onload(loader.bufferList);
            },
            function(error) {
                console.error('decodeAudioData error', error);
            }
        );
    }

    request.onerror = function() {
        alert('BufferLoader: XHR error');
    }

    request.send();
}

BufferLoader.prototype.load = function() {
    for (var i = 0; i < this.urlList.length; ++i)
        this.loadBuffer(this.urlList[i], i);
}

Там может быть что-то в этом решенииКак мне преобразовать массив аудиоданных в файл wav? Насколько я могу судить, они чередуют два буфера и кодируют их как .wav, но я не могу понять, где они записывают их в файл (сохраняя новый файл wav), есть идеи?

Ответ ниже - не очень помогает, так как я использую Web Audio Api (javascript), а не IOS

Ответы на вопрос(2)

Ваш ответ на вопрос