Программирование - вопрос/ответ



         

Программирование - часть 28


DWORD nSamplesPerSec; // Частота дискретизации
DWORD nAvgBytesPerSec; // Байт в секунду
WORD nBlockAlign; // Выравнивание данных в data-чанке
} WaveFormat;

Рассмотрим эту структуру подробнее.

wFormatTag Категория формата (неудачный перевод: калька format category). От этого значения зависят значения остальных полей этой структуры, структура <fmt-specific> и data-чанка. Существует несколько категорий формата; самая доступная — PCM (Pulse Code
Modulation) имеет wFormatTag = 1.
nChannels 1 — моно, 2-стерео, о большем числе каналов документация умалчивает.
nSamplesPerSec Частота дискретизации (число сэмплов в секунду).
nAvgBytesPerSec Среднее число байт в секунду, используется для эффективной буферизации. Для PCM вычисляется по формуле: (nChannels*nSamplesPerSec*nBitsPerSample)/8.
nBlockAlign Выравнивание данных в data-чанке. Для PCM вычисляется по формуле: (nChannels*nBitsPerSample)/8.
<fmt-specific> — Для категории PCM эта структура имеет одно значащее поле UINT nBitsPerSample, которое поведает нам о разрядности дискретизации (см. wFormatTag & Формат данных PCM). Если, например,nBitsPerSample = 12 , то сэмпл хранится в старших 12 бита

х слова, а младшие 4 — нули. Следом идет поле WORD cbSize, используемое не-PCM форматом ( так, формат ADPCM, например, хранит здесь некий коэффициент, необходимый для кодирования/декодирования сигнала). Для PCM-формата это поле может отсутствовать.

Формат данных PCM

Здесь описана схема размещения данных в data-чанке wave файла.
В моно wave файле сэмплы расположены последовательно один за другим: sample[0],sample[1],sample[2]…
В стерео wave файле сэмплы идут попарно: left[0],right[0],left[1],right[1],left[2]…

Для более, чем двухканального сигнала (квадрозвук?!?) последовательность чередования каналов не определена (а, может уже и определена, а я не знаю).

Channel0 — байт для левого канала
Channel1 — байт для правого канала
8 bit mono:
-Sample1- -Sample2- -Sample3- -Sample4-
Channel0 Channel0 Channel0 Channel0
8 bit stereo:




Содержание  Назад  Вперед