我是日本的Web开发人员。
这是关于堆栈溢出的第一个问题。
我现在正在创建一个简单的音乐Web应用程序。
制作音乐系统程序完全是一个初学者,所以我正在努力实现它。
经过各种调查,我注意到使用Web Audio API是最佳选择, 因此,我决定使用它。
Multiple Wav files
加载可以分为one Wav file
并能够从浏览器下载。 例如,加载多个wav文件,例如吉他,鼓和钢琴,然后 在浏览器上对其进行编辑,最后将其输出为一个Wav文件。 然后,我们可以从浏览器下载经过编辑的wav文件,然后就可以播放iTunes。
我在github上检查了Record.js,但是开发已经停止了大约2〜3年,并且有很多问题,我无法获得支持。所以我决定不使用它。 而且我检查了类似的问题Web audio API: scheduling sounds and exporting the mix
由于信息较旧,我不知道我是否仍然可以使用它 谢谢。
答案 0 :(得分:0)
嗨,欢迎来到Stack Overflow!
就将文件合并/混合而言,这是完全可以实现的! This article经历了许多(如果不是全部)步骤,就可以执行建议的任务。
要上传的每个文件都可以加载到AudioBufferSource中(示例在that article linked before中进行说明)音频数据加载到其中后,设置缓冲源的示例:
play: function (data, callback) {
// create audio node and play buffer
var me = this,
source = this.context.createBufferSource(),
gainNode = this.context.createGain();
if (!source.start) { source.start = source.noteOn; }
if (!source.stop) { source.stop = source.noteOff; }
source.connect(gainNode);
gainNode.connect(this.context.destination);
source.buffer = data;
source.loop = true;
source.startTime = this.context.currentTime; // important for later!
source.start(0);
return source;
}
然后还有一些专门为混合目的而设计的节点,例如ChannelMergerNode(将多个单声道合并到一个新的通道缓冲区中)。如果您不想使用javascript处理信号,但是使用Web Audio对象会更快,因为它们是浏览器中已经存在的本机编译代码。
在complete guide sent before之后,还存在使用以下代码导出文件(在演示案例中为.wav)的选项:
var rate = 22050;
function exportWAV(type, before, after){
if (!before) { before = 0; }
if (!after) { after = 0; }
var channel = 0,
buffers = [];
for (channel = 0; channel < numChannels; channel++){
buffers.push(mergeBuffers(recBuffers[channel], recLength));
}
var i = 0,
offset = 0,
newbuffers = [];
for (channel = 0; channel < numChannels; channel += 1) {
offset = 0;
newbuffers[channel] = new Float32Array(before + recLength + after);
if (before > 0) {
for (i = 0; i < before; i += 1) {
newbuffers[channel].set([0], offset);
offset += 1;
}
}
newbuffers[channel].set(buffers[channel], offset);
offset += buffers[channel].length;
if (after > 0) {
for (i = 0; i < after; i += 1) {
newbuffers[channel].set([0], offset);
offset += 1;
}
}
}
if (numChannels === 2){
var interleaved = interleave(newbuffers[0], newbuffers[1]);
} else {
var interleaved = newbuffers[0];
}
var downsampledBuffer = downsampleBuffer(interleaved, rate);
var dataview = encodeWAV(downsampledBuffer, rate);
var audioBlob = new Blob([dataview], { type: type });
this.postMessage(audioBlob);
}
因此,我认为Web-Audio具有您为此目的所需的一切!但是,根据您的Web开发经验,这可能会具有挑战性,但是它绝对值得学习!
如果可以的话,我认为绝对值得使用Web-Audio进行尝试,因为您几乎肯定会获得最佳的处理速度,但是还有其他库,例如Pizzicato.js仅举一例。我相信您还会找到很多其他人。