Формат звуковых файлов Microsoft Wave
Это наиболее распространенный благодаря своей гибкости формат хранения аудиоданных. Данный формат принадлежит к группе форматов файлов для передачи ресурсов RIFF (Resource Interchange File Formats). Обычно файлы имеют расширение wav. Помимо звуковых данных, файл может содержать текстовую информацию, различную служебную информацию и вообще любые (не только звуковые) данные. Каждый фрагмент данных имеет заголовок, в котором уточняется тип данных и размер фрагмента. Глобальный фрагмент имеет заголовок RIFF. Допускается вложенность фрагментов. Звуковые данные могут быть как сжатые, так и не сжатые. Несжатые данные хранятся в формате PCM (Pulse Code Modulation), при этом порядок следования таков: идет первый отсчет первого (например, левого) канала, затем второго, и т.д. (естественно, если звук моно, то канал всего один), затем второй отсчет первого канала, второго, и т.д. Для отсчетов разрядностью 16 бит (слово) данные хранятся в виде знакового целого, сначала младший, затем старший байт. При этом отсутствию сигнала соответствует значение 0, а максимально возможная амплитуда 215.
Структура файла с единственным фрагментом аудиоданных изображена на рис. 1:
Формат файлов Microsoft Wave RIFF PCM
Рис. 1
Структура WAVEFORMATEX используется для определения формата записанных данных. В Windows она определена следующим образом:
typedef struct {
WORD wFormatTag; // формат данных, например WAVE_FORMAT_PCM
WORD nChannels; // количество каналов
DWORD nSamplesPerSec; // частота дискретизации
WORD nAvgBytesPerSec; // скорость потока, байт в секунду
// для PCM равен nSamplesPerSec*nBlockAlign
WORD nBlockAlign; // минимальная единица измерения в байтах,
// для PCM равна BitsPerSample/8*nChannels
WORD wBitsPerSample; // Количество бит на отсчет
WORD cbSize; // размер доп. информации
} WAVEFORMATEX;