1. 使用Audio獲取duration
let audioUrl;
let duration = 0;
const processDuration = (blob: Blob) => {
const reader = new FileReader();
reader.onloadend = e => {
audioUrl = reader.result as string;
var media = new Audio(reader.result as string);
media.onloadedmetadata = function() {
if (media.duration != Infinity) {
duration = media.duration;
}
};
};
reader.readAsDataURL(blob);
};
但這個方法在Chrome上會存在bug,可能會計算duration為Infinity。可以嘗試用下面方法解決。
2. 直接獲取audiobuffer的duration
audioBuffer.duration
3. 用arraybuffer計算duration
如果獲取的是純pcm數據的arraybuffer,且知道audio的samplerate,計算$$duration = arraybuffer.bytelength / sampleRate / 2$$
