16

MediaRecorderAPIを使用して作成されたオーディオ ファイル/ブロブがあります。

let recorder = new MediaRecorder(this.stream)
let data = [];
recorder.ondataavailable = event => data.push(event.data);

その後、録音が終了したら:

let superBlob = new Blob(data, { type: "video/webm" });

このブロブを使用して を作成するにはどうすればよいAudioBufferですか? 次のいずれかが必要です。

  • オブジェクトBlobを(ArrayBufferAudioContext.decodeAudioData返すAudioBuffer) または
  • Blobオブジェクトを に変換します。ここで、 withFloat32ArrayにコピーできますAudioBufferAudioBuffer.copyToChannel()

それを達成する方法に関するヒントは大歓迎です。乾杯!

4

4 に答える 4

12

Blobオブジェクトを に変換するにはArrayBuffer、 を使用しますFileReader.readAsArrayBuffer

let fileReader = new FileReader();
let arrayBuffer;

fileReader.onloadend = () => {
    arrayBuffer = fileReader.result;
}

fileReader.readAsArrayBuffer(superBlob);
于 2016-11-01T16:36:28.623 に答える
2

すべての答えは真実です。ただし、Chrome 76 や Firefox 69 などの最新の Web ブラウザーでは、はるかに簡単な方法があります。Blob.arrayBuffer()

Blob.arrayBuffer()Promise を返すため、次のいずれかを行うことができます

superBlob.arrayBuffer().then(arrayBuffer => {
  // Do something with arrayBuffer
});

また

async function doSomethingWithAudioBuffer(blob) {
  var arrayBuffer = await blob.arrayBuffer();
  // Do something with arrayBuffer;
}
于 2020-06-05T06:22:50.547 に答える