我在规范的WAV结构中看不到这样的字段,但也许可以使用现有字段吗?
我知道我们可以轻松计算PCM流的样本数(raw_sound_data_size / (bits_pers_sample / 8)
),但是如何处理ADPCM?
答案 0 :(得分:1)
通常 Subchank2Size 是以字节为单位的数据大小。 bitsPerSample 样本中有多少位。因此样本数应为:
samples = Subchank2Size / channels / ( bitsPerSample / 8 ).
对于未压缩的数据是正确的
ADPCM数据保存在“块”中。该块有三个部分,标题,数据和填充。三者一起是< nBlockAlign>字节。
标题
typedef struct adpcmblockheader_tag {
BYTE bPredictor[nChannels];
int iDelta[nChannels];
int iSamp1[nChannels];
int iSamp2[nChannels];
} ADPCMBLOCKHEADER;
数据强>
数据是以(wBitsPerSample * nChannels)为一组解析的位串。
<强>填充强>
位填充用于将块四舍五入为精确的字节长度。
有关解码ADPCM格式的更多信息可以是found here
不幸的是,似乎无法在不枚举所有块的情况下找到精确的样本数。