0

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

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

在此处输入图像描述

4

1 回答 1

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 格式的更多信息,请参见此处

不幸的是,如果不枚举所有块,似乎无法找到确切的样本数。

于 2018-01-14T09:46:40.510 回答