如果您ArrayBuffer包含解码的 PCM 音频,您可以getAudioDuration()在下面使用。bytesPerSample如果该条件不封装您解码的音频,您可能希望直接通过。
function getAudioDuration(arrayBuffer, numChannels, sampleRate, isFloatingPoint) {
// PCM 16 or Float32
const bytesPerSample = (isFloatingPoint ? Float32Array : Uint16Array).BYTES_PER_ELEMENT
// total samples/frames
const totalSamples = arrayBuffer.byteLength / bytesPerSample / numChannels
// total seconds
return totalSamples / sampleRate
}
如果您ArrayBuffer包含编码音频(Opus、MP3、WAV),您可以手动解析二进制字节标头,使用第三方库来解析标头,或者让您的服务器向您发送音频属性(通道、采样率等) 通过 HTTP 响应标头。