второй момент почему этого нет в XGM - видимо экономят циклы процессоров, чтобы не тратить производительность на разжатие. может быть vgm файлы и стали бы меньше по размеру, но это не имеет смысла, так как сэмплы там (по моему и это не точно) играют путем спама содержимого сэмпла в регистр... эээ... $2A? то есть по байтно бомбит в этот регистр ямахи и ямаха это играет. этот спам по идее записан в vgm файле. впрочем это могут быть и оптимизированные vgm'ки - где сэмплы вынесены в специальный раздел файла, и проигрывание происходит путем вызова из этой библиотеки, а не побайтная запись значений регистра во времени в файле. хотя система все равно должна будет бомбить этот регистр для проигрывания.
К сожалению у Генезиса нет DMA для семплов, как это сделано в SNES и даже в NES. Зилог ручками пуляет каждый семпл в YM2612 и даже без FIFO.
В VGM семплы DAC хранятся в единственном количестве. Очень давно, я прикручивал YM2612 к LPT-порту компа и писал свой плеер-парсер VGM. Правда, из-за ограниченной скорости самого LPT-порта, некоторые ударные через DAC играли медленно и затормаживали воспроизведение VGM (например, из игр: Alien3, T2 Arcade game).
0x67, 0x66, tt, ss, ss, ss, ss – конкретно:
0x67 – маркер блока данных для DAC
0x66 – конец потока (здесь эта под-команда игнорируется!)
tt – тип данных (должно =0 – это значит YM2612 PCM data)
ssssssss – объём данных для DAC в байтах
Здесь логично запомнить смещение данных для DAC, тоесть начальный указатель
на PCM data в VGM-файле. Указатель музыкального потока увеличивается на ssssssss+7.
0x8* - конкретно:
A1=0 – выбираем Bank0
[0x2A]=Digital[Offset]
Задержка на * сэмплов
Увеличиваем Offset на 1 (указатель на PCM data)
Увеличиваем указатель потока на 1
Попросту говоря, данная команда пихает в DAC один байт PCM-данных (указатель
на PCM вычисляется командами 0x67 и 0xE0). Далее задержка на * сэмплов и увеличение
указателей музыкального потока и PCM data на 1.
0xE0, dd, dd, dd, dd – вычисление увеличения указателя на PCM data. Итоговое
значение указателя PCM data в данный момент: Offset=dddddddd+Адрес начала данных
для DAC в VGM-файле (адрес байта, следующего сразу после команды 0x67, 0x66, tt, ss,
ss, ss, ss). Указатель музыкального потока увеличивается на 5.
НО! к сожалению игра содержит некое количество эффектов, которые воспроизводятся с помощью FM звуков. XGM такое не умеет. ему подавай спецэффекты в виде сэмплов - wav'ок. поэтому мы предали XGM анафеме.
При написании игры, я сразу решил, что SFX - будут оцифровки, BGM -> 5FM + DAC + 4 PSG.
Сейчас озадачен выбором фоновой музыки для игры:
1. Брать VGM-ки с сеговских игр или демо из трекеров не хочется, так как это баяны, хоть и шедевральные, и с музыкой там всё ОК.
2. Пробовали VST GennyFL. Результат не понравился: итоговый VGM получается на несколько МБ, ноты проглатываются или наоборот вылезают. Часть каналов пропадает на реальной сеге.
3. Пробовали Deflemask. В техническом плане для сеги - он очень крут: трек звучит также как и написали. Но: большинство просто не могут написать полноценную музыкальную композицию с началом, раскачкой, активной частью, припевом, завершением, скруглением. В итоге у большинства получается просто простой цикл на 10 - 20 секунд, и его повторы, разбавленные парой инструментов.
4. Лично пробовал переносить безымянные треки в формате MOD (с Амиги, 4 канала до 14 инструментов(?)) в VGE(VGM) с помощью VGMMaker и банка инструментов. За шесть часов более-менее удалось подобрать схожие инструменты, подтюнить октавы. Получается тот же трек что и MOD, но сыгранный инструментами YM2612. Отдельно вручную прописывал ударные партии на 6-й канал (DAC). В некоторых MOD, ударные размылены на несколько каналов - приходится сводить в 1 канал. К сожалению, OpenMPT далёк от удобного функционала - не хватает функции объединения выбранных инструментов в одну дорожку.
Результат порадовал - композиция трека сохраняется (нотная партия), музыка на несколько голов сложнее, чем простой копирование "тупо одного цикла по 10 с".
5. MID2VGM. Пока не успел с ним разобраться.
6. XM2ESF. С наскоку не понял как с ним возиться.
Для меня конечно, пока предпочтителен способ (4), чем способы (2) и (3). Как показала практика, фрилансеры ничего путного не напишут.