VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Форматы файлов.
Формат звукового файла WAV
:

Этот формат наиболее распространён в системе windows. В большинстве это связано с тем, что его структура очень удобна для использования в API функциях. А самое главное это то, что данные в файле могут находиться как в сжатом, так и несжатом виде. Это даёт возможность его использования на все случаи жизни.

Помимо звуковых данных, ты можешь засунуть сюда всё, что угодно. Примером может быть любая информация о создателях файла или графические картинки. Короче гворя, WAV формат универсален.

Единственный "недостаток", файл не может быть более 4Гб. Слово "недостаток" я взял в кавычки, потому что этого размера тебе будет достаточно для записи трёх часов музыки в отличном качестве и без сжатия. Я не думаю, что у тебя будут такие громадные файлы.

Данный формат относится к разряду RIFF (Resource Interchange File Formats). Чтобы ты понимал, к этому разряду относится также и знаменитый видеоформат AVI.

Теперь переходим к структуре. В WAV файле может храниться один или несколько блоков данных. Каждый блок может содержать ещё несколько блоков. Так получается дерево звуковых данных. Каждый блок имеет свой заголовок. Заголовок состоит из:

  • Идентификатор фрагмента (4 байта).
  • Размер звуковых данных (4 байта).

Идентификатор может содержать значения: RIFF, DATA, .TXT и т.д. В статьях о программировании звука нас будут интересовать только блоки RIFF и data. Теперь посмотрим на структуру WAV файла, с которым мы будем работать при программировании звука:

  • 4 байта - идентификатор файла. В нашем случае всегда RIFF.
  • 4 байта - размер данных.
  • 8 байт - снова идентификатор. Первые 7 байт равны WAVE fmt. Последний в основном пробел.
  • 4 байта - размер последующих данных.
  • WAVEFORMATEX - структура, описывающая хранящиеся звуковые данные.
  • 4 байта - идентификатор. Равен data.
  • 4 байта - размер звуковых данных.
  • Сами данные.

Это структура файла. Нас ещё интересует структура WAVEFORMATEX:

  PWaveFormatEx = ^TWaveFormatEx;
  tWAVEFORMATEX = packed record
    wFormatTag: Word;
    nChannels: Word;
    nSamplesPerSec: DWORD;
    nAvgBytesPerSec: DWORD;
    nBlockAlign: Word;
    wBitsPerSample: Word;
    cbSize: Word;
  end; 
  • wFormatTag - Формат звуковых данных. Мы будем использовать в основном WAVE_FORMAT_PCM.
  • nChannels - Количество каналов (1- моно, 2 - стерео).
  • nSamplesPerSec - Частота дискретизации (возможны значения 8000, 11025. 22050 и 44100).
  • nAvgBytesPerSec - Количество байт в секунду. Для WAVE_FORMAT_PCM это является результатом nSamplesPerSec* nBlockAlign.
  • nBlockAlign - Выравнивание блока. Для WAVE_FORMAT_PCM равен wBitsPerSample/8* nChannels
  • wBitsPerSample -Количество бит в одной выборке. Для WAVE_FORMAT_PCM может быть 8 или 16.
  • cbSize - Размер дополнительной информации, которая располагается после структуры. Если ничего нет, то должен быть 0.

Если ты читал первую статью про программирование звука в моём журнале, то наверно уже заметил, что для воспроизведения звуковых данных нам нужна точно такая же структура. Это очень упрощает нашу прогу. Достаточно прочитать WAVEFORMATEX и звуковые данные и отправить всё это драйверу. Никаких преобразований делать не надо.

Всё. Осталось только воспользоваться полученными знаниями. Удачного тебе саунда.


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©