我正在使用 Phonegap for Ios 构建一个卡拉 OK 应用程序。
我在 www/assets 文件夹中有音频文件,可以使用 media.play() 函数播放它们
这允许用户收听背景音乐。当媒体正在播放时,另一个媒体实例正在录制。
录音完成后,我需要将录音文件放在背景音轨上,但我不知道如何去做。
我认为可能有效的一种方法是使用 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