我正在尝试将 AudioBuffer 转换为可以下载的 wav 文件。我尝试了 2 种方法:第一种方法,我记录所有声音,然后扔到 mediaRecorder 并执行以下操作:
App.model.mediaRecorder.ondataavailable = function(evt) {
// push each chunk (blobs) in an array
//console.log(evt.data)
App.model.chunks.push(evt.data);
};
App.model.mediaRecorder.onstop = function(evt) {
// Make blob out of our blobs, and open it.
var blob = new Blob(App.model.chunks, { 'type' : 'audio/wav; codecs=opus' });
createDownloadLink(blob);
};
我创建了一个包含 blob 的块表,然后使用这些块创建一个新的 Blob。然后在函数“createDownloadLink()”中创建一个音频节点和一个下载链接:
function createDownloadLink(blob) {
var url = URL.createObjectURL(blob);
var li = document.createElement('li');
var au = document.createElement('audio');
li.className = "recordedElement";
var hf = document.createElement('a');
li.style.textDecoration ="none";
au.controls = true;
au.src = url;
hf.href = url;
hf.download = 'myrecording' + App.model.countRecordings + ".wav";
hf.innerHTML = hf.download;
li.appendChild(au);
li.appendChild(hf);
recordingslist.appendChild(li);
}
音频节点已创建,我可以收听录制的声音,因此一切似乎都正常。但是当我下载文件时,任何播放器都无法读取它。我认为这是因为它没有以 WAV 编码,所以无法理解。
第二种方法与上面的方法相同,除了“createDownloadLink()”函数。
function createDownloadLink(blob) {
var reader = new FileReader();
reader.readAsArrayBuffer(blob);
App.model.sourceBuffer = App.model.audioCtx.createBufferSource();
reader.onloadend = function()
{
App.model.recordBuffer = reader.result;
App.model.audioCtx.decodeAudioData(App.model.recordBuffer, function(decodedData)
{
App.model.sourceBuffer.buffer = decodedData;
})
}
在这里,我得到了我录制的声音的 AudioBuffer,但我没有找到如何将其转换为 WAV 文件...