AudioBufferをダウンロードできるwavファイルに変換しようとしています。私はすべての音がmediaRecorderを投げGOING記録し、これを行う、最初の1 :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);
};
私はブロブを含むチャンクテーブルを作成し、これらのチャンクを使用して新しいブロブを作成 は、私は2つの方法を試してみました。そして、「)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()"機能を除いて、2番目の方法は上記と同じです。ここで
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