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