如何使用Web Audio API获取音频采样率、位深度与声道数?
音频元数据获取问题解答
你要的三类元数据中,采样率、声道数可以通过Web Audio API直接获取,位深度则需要自行解析音频文件二进制数据才能得到。
可直接获取的元数据(采样率、声道数)
Web Audio API提供的decodeAudioData方法可以对音频二进制数据进行解码,返回的AudioBuffer实例直接暴露以下两个属性:
sampleRate:音频的采样率,单位为HznumberOfChannels:音频的声道数(1为单声道,2为立体声,以此类推)
示例代码如下:
const audioContext = new (window.AudioContext || window.webkitAudioContext)(); // file为你上传得到的File对象,也可以从<audio>元素关联的资源提取 file.arrayBuffer() .then(buf => audioContext.decodeAudioData(buf)) .then(audioBuffer => { const sampleRate = audioBuffer.sampleRate; const channelCount = audioBuffer.numberOfChannels; console.log(`采样率:${sampleRate}Hz,声道数:${channelCount}`); })
需自行解析的元数据(位深度)
Web Audio API解码后得到的AudioBuffer存储的是标准化的32位浮点PCM数据,原始音频文件的位深度元数据不会在解码过程中保留,因此无法通过Web Audio API直接获取。
你需要根据音频文件的格式(WAV、FLAC、MP3等)解析文件头部的二进制字段,不同格式的位深度存储位置和规则不同,比如WAV格式可以直接在文件头固定偏移位置读取到位深度数值。
内容的提问来源于stack exchange,提问作者AdamInTheOculus
相关产品推荐
相关产品推荐

