Данный формат файлов разработал Arnaud Carre (Leonard/OXYGENE) для своего проигрывателя ST-Sound (с эмуляцией YM2149F). Первоначально он задумывал его как плеер музыки с Atari ST, но впоследствии он модернизировал свой формат, благодаря чему проект получил статус Multi-Computer Sound Emulator.
В данный момент этот проект состоит из большого числа программ, начиная с plug-in'а WinАmp, отдельного проигрывателя, множества конвертеров и утилит и заканчивая огромным архивом музыки с различных платформ.
В Ay_Emul поддержаны только те форматы проекта, в которых хранятся дампы регистров YM2149F. Дополнительные эффекты в части форматов поддержаны частично: была поставлена цель проигрывать любые сэмплы только через музыкальный сопроцессор, принудительно переводя соответствующий канал в режим DAC, поэтому 8-битные сэмплы не играются напрямую, а предварительно переводятся в 4-битный формат для YM2149F.
Кроме того, так как на момент добавления поддержки в Ay_Emul ещё не было доступно исходных кодов авторской библиотеки ST-Sound, и форматы изучались лишь по официальным описаниям с минимальным реверс-инжинирингом, совмещённым с первым знакомством с платформой Atari ST, по крайней мере в начале пути не всё было реализовано верно: были допущены и ошибки, и ряд упрощений и трюков. И если ошибки с годами были исправлены, то часть трюков используется до сих пор.
Поэтому, если для вас важно услышать некоторые файлы YM-формата, которые либо не поддержаны в Ay_Emul, либо звучат не так, воспользуйтесь программами автора формата.
Прослушивая музыку с Atari ST и Amstrad, не забывайте установить частоту сопроцессора в 2 000 000 и 1 000 000 Гц соответственно, т.к. в YM2, YM3 и YM3b файлах нет информации об этом параметре.
Итак, любой YM файл представляет собой архив LHA типа 5, созданный программой LHA.EXE v2.00 и выше с ключом -h0 (заголовок типа "ноль") by Haruyasu Yoshizaki.
Внутри этого архива находится один файл с любым именем, поддерживаемые форматы которого описаны ниже.
Первые четыре байта являются ASCII строкой "YM2!". В целом формат не отличается от YM3, за исключением того, что в неиспользуемых битах некоторых регистров зашифрована информация о цифровых сэмплах. Количество сэмплов и их содержимое жёстко прошиты в плеер (эти сэмплы использовал Mad Max на Atari ST).
Первые четыре байта являются ASCII строкой "YM3!". Далее следует блок данных, который состоит из значений, отправляемых в YM-регистры. Регистры обновляются один раз за прерывание компьютера. Предположим, песня состоит из N квантов (прерываний). Тогда блок будет содержать N байтов – значений, отправляемых в регистр 0, за которыми следуют ещё N байтов – значений, отправляемых в регистр 1 и т.д., всего N*14 байтов. Если в текущем кванте не было записи в регистр 13, то байт в блоке данных, относящийся к этому кванту и к этому регистру равен 255.
Первые четыре байта являются ASCII строкой "YM3b". Затем идёт такой же блок, как и в YM3. После блока находится значение DWORD, указывающее номер кванта для зацикливания мелодии.
Данный формат содержит расширенную информацию о музыке, как то: частота прерываний, частота чипа, название, автор, комментарий, а также специфическую информацию, позволяющую воспроизводить эффекты, названные автором ST-Sound Digi-Drum и SID-Sound (некоторые программы на Atari ST используют эти эффекты).
Выдержка из YMFORMAT.TXT
---------------------------cut here-------------------
Offset Size Type Comment 0 4 DWORD ID of YM5 format. ('YM5!') 4 8 string[8] Check String ('LeOnArD!') 12 4 DWORD Nb of valid VBL of the file. 16 4 DWORD Song attributes (see bellow) 20 2 WORD Nb of digi-drum sample (can be 0) 22 4 DWORD YM2149 External frequency in Hz (ex:2000000 for ATARI-ST version, 1000000 for AMSTRAD CPC) 26 2 WORD Player frequency in Hz (Ex: 50Hz for almost player) 28 4 DWORD Vbl number to loop the song. (0 is default) 32 2 WORD Size (in bytes) of future additional data. (must be 0 for the moment) For each digidrum sample: { .. 4 DWORD sample size .. ? BYTES sample data (8bits per sample) } .. ? NT-String Name of the song. .. ? NT-String Name of the author. .. ? NT-String Comments (YM file converter ?!) .. ? All YM2149 registers. .. 4 DWORD End-File check. ('End!')
---------------------------cut here-------------------
Данный формат отличается от YM5 только наличием возможности записи ещё двух специальных эффектов – Sinus-SID и Sync Buzzer, а также тем, что любые два эффекта могут исполняться одновременно.
В YMFORMAT.TXT есть не совсем очевидные моменты и термины, поясним:
Ay_Emul поддерживает все специальные эффекты описанных выше форматов. Также стоит отметить, что Ay_Emul умеет работать даже с неупакованными YM-файлами.
Более подробную информацию можно получить из официального архива ST-Sound или на страничке проекта ST-Sound http://leonard.oxg.free.fr.
Там же можно найти авторские исходники библиотеки на основе ST-Sound, из которой в Ay_Emul используются сэмплы для формата YM2.