同様の問題があり(recorder.jsも使用)、emscripenを使用してffmpegからJavascriptへのポートを含む優れたvideoconverter.jsプロジェクトを使用して解決できました。これの欠点は、ffmpeg.js ファイルが約 25Mb であることです。
WAV (HTML5再生用) と、エンコードされた MP2 ファイルを含む Blob のexportWAV
両方を返すように、recorderWorker.jsの既存の関数を変更しました。<audio>
function encodeWAV(samples) {
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);
/* ... various writing methods */
return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) };
}
function ffmpeg_convert(buffer) {
console.log("starting mp2 conversion");
var args = "-i input -f mp2 output.mp2";
var results = ffmpeg_run({
arguments: args.split(" "),
files: [
{
data: new Uint8Array(buffer),
"name": "input"
}
]
});
if (results) {
var file = results[0];
console.log("File recieved", file.name, file.data);
return new Blob([file.data], { type: "audio/mpeg" });
}
return null;
}
このメソッドは、ffmpeg によってサポートされている任意のコーデックに WAV をエンコードするために使用できます。libavcodec