AudioBuffer를 다운로드 할 수있는 wav 파일로 변환하려고합니다. 나는 모든 소리가 mediaRecorder을 던졌다가는 기록하고이 작업을 수행, 첫 번째 :AudioBuffer를 wav 파일로 변환하는 방법?
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);
};
나는 모양을 포함하는 청크 테이블을 만든 다음이 덩어리로 새로운 물방울을 만들 나는이 방법을 시도했다.
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);
}
오디오 노드가 생성되고 난 그렇게 모든 것을 보인다 녹음 된 사운드를들을 수 있습니다 : 그런 다음 함수에서 "createDownloadLink()는"나는 오디오 노드와 다운로드 링크를 생성 작업. 그러나 파일을 다운로드 할 때 어떤 플레이어도이 파일을 읽을 수 없습니다. 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;
})
}
이의 mediaRecorder을 통과하지 마십시오. 대신 MediaStreamSource를 생성 할 audioContext를 사용하고 ScriptProcessorNode에 전달합니다. 여기에서이 processorNode에 전달 된 모든 데이터를 기록하고 올바른 wav 메타 데이터와 함께 연결합니다. [recorder.js] (https://github.com/mattdiamond/Recorderjs/blob/master/src/recorder.js)와 같은 라이브러리는 이러한 마지막 단계에 도움이됩니다. MediaStreamSource로 피드를 보내면됩니다. – Kaiido