Как определить количество образцов в файле ADPCM wav?

Я не вижу такого поля в канонической структуре WAV, но, возможно, возможно использовать существующие поля для этого?

Я знаю, что мы можем легко рассчитать количество образцов для потока PCM (raw_sound_data_size / (bits_pers_sample / 8)), но что делать с ADPCM?

1 ответ

Обычно Subchank2Size - это размер данных в байтах. И bitsPerSample сколько битов в выборке. Так что количество образцов должно быть:

samples = Subchank2Size / channels / ( bitsPerSample / 8 ).

Это верно для несжатых данных

Данные ADPCM сохраняются в "блоках". Блок состоит из трех частей: заголовка, данных и отступов. Три вместе составляют байтов.

заголовок

typedef struct adpcmblockheader_tag {
  BYTE bPredictor[nChannels];
  int iDelta[nChannels];
  int iSamp1[nChannels];
  int iSamp2[nChannels];
} ADPCMBLOCKHEADER;

Данные

Данные представляют собой битовую строку, анализируемую по группам (wBitsPerSample * nChannels).

набивка

Битовое заполнение используется для округления блока до точной длины байта.

Подробнее о декодировании формата ADPCM можно узнать здесь

К сожалению, кажется, что нет способа найти точное количество отсчетов без перечисления всех блоков.

Другие вопросы по тегам