nodejsでオーディオファイルの一部だけを送信しようとしています。たとえば、60秒から100秒です。私は時間の範囲src='path/to/audio.mp3#t=60,100'
を使用したくないので、サーバーからファイル全体を送信するだけで数秒間再生したくないからです。Javascript:特定の時間範囲から部分的なオーディオチャンクを送信する
私は部分チャンクを送信する必要があります。問題は、私が必要とする時間範囲のバイト範囲がわからないことです。私は時間とバイトが線形であると仮定したので、バイト範囲を計算するのに合計時間に相当する時間範囲を使用しようとしました。それは40秒のクリップのみを送信しますが、間違った時刻に開始します。
どのように時間の正しい塊を得ることができますか。
var start = 60;
var end = 100;
var track = "/path/to/audio.mp3";
var total = Math.ceil(probeData.format.duration); //total length of audio in seconds
var start_ratio = (start/total); //ratio of the starting position
var end_ratio = (end/total); //ratio of the ending position
var start_chunk = Math.ceil(start_ratio * file_size); //using it on the file_size
var end_chunk = Math.ceil(end_ratio * file_size);
var chunksize = (end_chunk - start_chunk) + 1;
var file = fs.createReadStream(track, {start: start_chunk, end: end_chunk});
res.writeHead(206, {
"Content-Range": "bytes " + start_chunk + "-" + end_chunk + "/" + file_size,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": "audio/mp3"
});
file.pipe(res);
フレームを解析する必要があると思います。このhttps://github.com/audiocogs/mp3.js/blob/master/src/decoder.jsを見てください –