Спецификация Wave format

Казалось, что может быть проще, чем .Wav файл, но когда доходит до дела... Вот заголовок .Wav файла на все случаи жизни:
Название поля Размер и формат Содержание
Заголовок файла 4 байта (DWord) ASCII текст "RIFF" Процедура, переводящая строку в DWord, включена в модуль Wave
Размер файла 4 байта (DWord) Размер файла без строки "RIFF" (4 байта) и собственно числа размера (4 байта). Это размер_файла - 8.
WAV заголовок 4 байта (DWord) ASCII текст "WAVE"
Описание формата 4 байта (DWord) ASCII текст "fmt " (включая пробел)
Размер описания формата 4 байта (DWord) Тип WAVE файла (2 байта) + mono/stereo (2 байта) + частота дискретизации (4 байта) + байт_в_секунду (4 байта) + выравнивание (2 байта) + разрядность (2 байта). В сумме 16.
Тип WAVE файла 2 байта (Word) Заголовок PCM = $01 (линейная дискретизация). Другие значения подразумевают некоторые формы сжатия.
Количество каналов 2 байта (Word) mono ($01) или stereo ($02). Можно попробовать больше...
Частота дискретизации 4 байта (DWord) обычно 44100 Hz, 22050 Hz, ...
байт в секунду 4 байта (DWord) Скорость потока данных = Число_каналов*Частота_дискретизации*Разрядность/8
Выравнивание 2 байта (Word) Число байт в сэмпле = Число_каналов*Разрядность/8
Разрядность 2 байта (Word) Двоичные разряды дискретизации (обычно 32, 24, 16, 8). Интересно, что будет, если установить это равным, например, 5 ..?
Заголовок данных 4 байта (DWord) ASCII текст "data".
Размер данных 4 байта (DWord) Число байта собственно звуковых данных
Данные -?- Собственно данные. Будьте внимательны при записи стерео (см. ниже)

Замечания.

  1. Не волнуйтесь о формате чисел. Delphi все сделает само. Помните, что второй word в списке идет первым в DWord.
    {Например: если A1 и A2 - word, то dword B=(A1 и A2) есть (A2 shl 16) + A1 }
  2. Помните про порядок размещения сэмплов отдельных каналов в стерео.
    Sample 1 - Left Sample 1 - Right Sample 2 - Left Sample 2 - Right Sample 3 - Left ...

    Намного быстрее и удобнее писать файлы в DWord, поэтому левый (AL) и правый (AR) сэмплы в наиболее популярной 16-битной дискретизации пакуются в DWord как D = (AR shl 16) + AL Первый и второй сэмплы в DWord в случае моно файла пакуются в DWord как
    D = (A2 shl 16) + A1
  3. В случае 8-битной дискретизации сэмпл - байт без знака (0..255),
    в случае 16-битной - целое со знаком (-32767..32767)
Модуль Delphi, содержащий основные функции для работы с WAV-файлами Wave.pas

©2002-2003, Veter      English  Беларуская  Русский
Сайт создан в системе uCoz