AS0

Введение

Это компилированные модули ASC Sound Master (Advanced Sound Master, ASM) версии 0.12, проект Андрея Сендетского (ASC). Несколько слов об этом проекте можно найти в описании формата ASC. Рекомендую предварительно с ним ознакомиться, так как формат AS0, как предшественник, имеет всего одно незначительное отличие, и следующее описание посвящено только ему.

Чтобы немного сгладить ваше разочарование, в конце приведено описание формата, сходного с AS0, три файла этого формата в виде плеер+модуль можно найти на дисках TR-DOS в сети (имена файлов AT, CHIP'DAL, TENNIS). Структура настолько близка, что приводит к ложному срабатыванию некоторых риперов музыки, которые принимают их за обычный AS0.

Особенности формата AS0

В версии 0.12 зацикливание всегда производится на начало, то есть отсутствует понятие "Позиция для зацикливания" в списке позиций. Модули AS0 как по общей структуре, так и по структуре паттернов, сэмплов и орнаментов, ничем не отличается от ASC, за исключением однобайтового поля LoopPos, которое было добавлено в ASC по смещению +2.

Из-за столь незначительной разницы в Ay_Emul не было назначено формату ASM 0.12 отдельного расширения для имени файла, вместо этого он конвертируется на лету в ASC (хотя и помечается в плейлисте как ASC0).

Однако, в последние годы в сети стали часто попадаться модули ASM 0.12 с расширением файла ".as0", в некоторые вставлена авторская строчка из плеера, и многие из них обрезаны с конца (на звук обычно не влияет, так как под обрезку попадают в основном неиспользуемые орнаменты). Чтобы Ay_Emul их "увидел" (явно повреждённые модули поиск в Ay_Emul игнорирует), решено было добавить расширение ".as0" в список поддерживаемых им типов файлов.

Для того, чтобы превратить модуль AS0 в ASC достаточно переместить данные, начиная со смещения +2, на 1 байт вперёд и в образовавший промежуток вставить байт 0 (зацикливание на позицию 0, т.е. на начало) и увеличить на 1 значение трёх указателей на паттерны, сэмплы и орнаменты.

Формат-предшественник AS0

В своё время мне попались странные модули ASM, по структуре напоминающие AS0, но они не проигрывались стандартным плеером ASM v0.12. Добавив их в Tr_Songs вместе с плеерами в формате AY (AT.ay, CHIP'DAL.ay, TENNIS.ay), я "временно" решил проблему и потому вплотную занялся ими только в 2022 году.

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

В результате был написан конвертер "as02as0", и теперь все три модуля находятся в Tr_Songs в виде ASC. В виду малого количества имеющихся модулей, данный конвертер не стал встраиваться в поиск модулей Ay_Emul, т.к. сделать детект надёжным при такой незначительной для отладки выборке сложно.

Структура паттерна предшественника AS0

БайтыОписание
0x00..0x55, [Env]Нота. Env – младший байт периода огибающей (если включена). Выйти.
0x56..0x7dВыйти.
0x7eПрервать цикл сэмпла. Выйти.
0x7fВыключить звук. Выйти.
0x80..0x9fСэмпл 0..31.
0xa0..0xbfОрнамент 0..31.
0xc0Включить огибающую. Период Env сразу после ноты.
0xc1..0xcfГромкость канала 1..15. Выключить огибающую.
0xd0..0xefШум 0..31.
0xf0, SkipSkip – пропуск строк 1..64. По умолчанию 1.
0xf8Тип огибающей 8.
0xfaТип огибающей 10.
0xfсТип огибающей 12.
0xfeТип огибающей 14.
0xffКонец паттерна.