Из газеты AlCoNews#26, Рязань, 13.01.2004 Автор: Alone Coder (Dima Bystrov) note: В оригинальном тексте содержалась ошибка в описании заголовка, здесь она исправлена. Формат модуля Chip Tracker 1.x ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Расширение .CHI Модуль состоит из четырёх частей - заголовок, ордер (список по- зиций), паттерны, сэмплы. Каждая часть выравнена по границе сек- торов. Заголовок имеет размер 1 сектор: +0 (8) "CHIPv1.0" +8 (32) имя трека (русских букв в шрифте нет) +40 (1) tempo Внимание! ДОЛЖНО СЧИТАТЬСЯ, что tempo измеряется в 50-х долях секунды, хотя версии редактора до 1.3 включительно и плейер 0.01 версии играют сонг из-за допущенной ошибки несколько мед- леннее! +41 (1) длина сонга-1 (последняя используемая позиция) 0..255 +42 (1) позиция зацикливания (0..255) +43 (16*4) параметры сэмплов (в порядке 0..F): ++0 (2) позиция зацикливания (равна длине для незацикленных) ++1 (2) длина. Сначала младшие байты, потом старшие. Для неиспользованных сэмплов здесь нули. +107 (31) зарезервировано (нулевые байты). +138 (16*8) имена сэмплов (в том же порядке). По 8 байт на имя. Для неиспользованных сэмплов здесь пробелы. Список позиций имеет размер 1 сектор и содержит номера паттернов в порядке проигрывания. Номера паттернов хранятся как 0..30, т.е. на единицу меньше, чем показывается в редакторе. Неисполь- зованные позиции содержат 0. Паттерны хранятся до последнего использованного в списке пози- ций. Каждый паттерн занимает 512 байт, которые рассматриваются как два запареллеленных блока по 256 байт. В паттерне 64 строч- ки, каждая из которых занимает 4 последовательных байта в первом 256-байтовом куске паттерна и ещё 4 последовательных байта во втором. Каналы A,B,C,D хранятся именно в таком порядке. Причём каналы A,D должны играться как правые, а B,C - как левые. Для каждой ноты каждого канала: в первом куске: во втором куске: %nnnnnnCC %ssssPPPP nnnnnn - нота (0=пусто, 1=C-1, ... 60=B-5, 63=пауза); ssss - её сэмпл (обязательно указан!); CC - код команды, а PPPP - её параметр: 00=sample offset. Сэмпл играется с PPPP*512-го байта, но в поле ноты должна стоять нота; 01=slide down(-) на PPPP микросапогов каждую 1/50 секунды; 10=slide up(+) на PPPP микросапогов каждую 1/50 секунды; Микросапог - условная единица частоты (не периода!); Слайды действуют только в пределах текущей строчки. 11=в канале A - темп PPPP (1..15); в канале D - конец паттерна (текущая строчка - последняя); в каналах B,C - запрещено. Сэмплы хранятся в 8-битном беззнаковом виде, причём каждый сэмпл выравнивается по границе сектора (256 байт). В неиспользованной таким образом части последнего сектора находится то же, что и в начале цикла этого сэмпла. Если он не зациклен, то там значения 128. Сохраняются все сэмплы, кроме пустых. Максимум #BB=187 сек- торов сэмплов. Ещё раз внимание! поскольку из-за второй ошибки в программе Chip Tracker Compiler v0.01 не грузит до конца модули, имеющие пустые сэмплы, прилагаю исходник этого плейера, в котором имеются нуж- ные исправления (скорость в том числе).