如何确定ADPCM wav文件中的样本数?

时间:2018-01-14 08:49:06

标签: wav riff

我在规范的WAV结构中看不到这样的字段,但也许可以使用现有字段吗?

我知道我们可以轻松计算PCM流的样本数(raw_sound_data_size / (bits_pers_sample / 8)),但是如何处理ADPCM?

enter image description here

1 个答案:

答案 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

不幸的是,似乎无法在不枚举所有块的情况下找到精确的样本数。