Главная » Программирование звука » Формат файла VOC

0

Файловый  формат  VOC  был  разработан  фирмой  Creative  Labs  для  демонстрации своих  звуковых  карт.  Специфика  формата  отражает  их  характерные  особенности, но  несмотря  на  это,  он стал довольно популярным среди  пользователей  операционных систем MS-DOS и Windows.

Файл  VOC  состоит  из  заголовка,  за  которым  следуют  блоки  данных.  Определенные блоки данных содержат непосредственно звуковую информацию; в других записываются  сведения  о  формате  или  иные  вспомогательные  данные.  Так  как первоначально  он  разрабатывался  для  процессоров  семейства  Intel,  все  многобайтные значения хранятся, начиная с младшего байта.

Идентификация файлов VOC

Любой  файл  VOC  начинается  с  сигнатуры  длиной  20  байт,  содержащей  слова Creative  Voice  FiIe  и  символ  Control+Z.  Символ  Control+Z  представляет  собой маркер  конца  файла  в  MS-DOS;  его  присутствие  гарантирует,  что  весь  файл  не может быть случайно распечатан или изменен в этой системе.

Листинг 16.1. Идентификация файла формата VOC

bool IsVocFile(istream &file) { file.seekg(0); // B начало файла. char id[21];

file.read(id,20);

return (!strncmp(id,"Creative Voice File\x1a",20));

}

Заголовок файла формата VOC

Структура   заголовка   показана   в   табл.   16.1.   B   нем   указывается   сигнатура и  версия  файла.  Обратите  внимание  на  величину  26  (шестнадцатеричное  значение  1A),  которая  является  символом  конца  файла  в  операционных  системах  семейства  MS-DOS.  Код  версии  файла  обычно  равен  266  (версия  1.10)  или  176 (версия 1.20).

Используя  данные  табл.  16.1,  вы  сможете  легко  написать  программу  для  чте-

ния заголовка файла формата VOC.

Листинг 16.2. Члены класса VocRead

private:

void ReadHeader(void);

Таблица 16.1. Структура заголовка файла VOC

Длина                                 Описание

19                                              Строковый идентификатор: Creative Voice File

1                                                Байт со значением 26 (конец файла MS-DOS)

2                                                Общий размер заголовка, обычно 26

2                                                Код версии файла: номер основной версии*256+дополнительный номер версии

2                                                Контрольное значение: 4659 версия файла

Листинг 16.3. Реализация класса VocRead

void VocRead::ReadHeader(void) {

char id[21];

int headerSize, fileVersionCode, fileVersionCheck;

_stream.read(id,20);

if (strncmp(id,"Creative Voice File\x1a",20)) {

// Это   не   VOC-файл.

cerr << "This is not a VOC file.\n";

exit(1);

}

headerSize = ReadIntLsb(_stream,2);

if (headerSize < 26) {

// VOC-файл   поврежден.

cerr << "This VOC file is corrupted.\n";

exit(1);

}

fileVersionCode = ReadIntLsb(_stream,2);

fileVersionCheck = ReadIntLsb(_stream,2);

if (fileVersionCode + fileVersionCheck != 0x1233)

// VOC-файл, возможно,

// поврежден.

cerr << "This VOC file may be corrupted.\n";

// Длина   заголовка

// больше 2 6 байт?

if (headerSize > 26)

SkipBytes(_stream,26-headerSize); // Пропускаем  остальное.

}

Так как заголовок, возможно, когда-нибудь будет расширен, важно пропускать любые данные, которые могут следовать за стандартной информацией.

Источник: Кинтцель Т.  Руководство программиста по работе со звуком = A Programmer’s Guide to Sound: Пер. с англ. М.: ДМК Пресс, 2000. 432 с, ил. (Серия «Для программистов»).

По теме:

  • Комментарии