PDA

Просмотр полной версии : Фоновое проигрывание AY/YM музыки в меню Aeon



ILoveSpeccy
04.05.2009, 17:59
Есть вопрос к специалистам!
Была идейка в главное меню Aeon добавить какую нибудь AY музычку!
Сначала хотел просто записать в 8 бит моно WAV, но размер уж больно
большой получается. Потом подумал, а что если взять и записать с эмуля
все обращения к AY и просто повторить их?
Меня интересует вот что:
каким образом формируется AY музыка? Каждое /INT прерывание грузятся
регистры AY или както подругому?

newart
04.05.2009, 18:42
Каждое /INT прерывание грузятся
регистры AY
ага. можешь в AY емуль любой музон скинуть в PSG (дамп регистров), размер будет 50-200кб.

ILoveSpeccy
04.05.2009, 22:40
ага. можешь в AY емуль любой музон скинуть в PSG (дамп регистров), размер будет 50-200кб.

Ага, дамп сделать получилось!

Только теперь осталось разобраться с форматом PSG:)
Может есть инфа какая нибудь о формате этих PSG-файлов???

Добавлено через 5 минут
Уже нашел!!!!!!!!

molodcov_alex
04.05.2009, 22:49
В AY_emul в хелпе есть описание.
Существуют как обычные PSG, так и расширенные EPSG. Кроме того, существуют PSG2-файлы, аналогичные ZX50-файлам (их описание можно найти на сайте RDOSPLAY), но поддерживать их в данном Эмуляторе автор не видит смысла. В интернете немало PSG файлов эмулятора БК, но они пока не поддержаны в Ay_Emul.

PSG

Данные файлы создаются эмулятором Speccy 'x128' by James McKay, а также эмулятором fMSX, которым пользоваться не приходилось. Что касается первого, то он при создании PSG файлов допускает ошибки. Поэтому лучше всего пользоваться эмулятором Speccy “Z80 Stealth” Кирилла Колпакова (Mr.Kirill). Кирилл в своё время охотно внедрил в свой эмулятор некоторые предложенные мной функции, сильно упрощающие процесс создания PSG файлов. Кроме того, последние версии Z80 Stealth позволяют с легкостью создавать PSG-файлы, используя возможности встроенного отладчика. Скачать эмулятор можно с http://z80.da.ru/.

Ниже предложено всё, что удалось найти в Интернете.

Смещение Число байт Описание

+0 3 Идентификатор 'PSG'
+3 1 Маркер, равный "1Ah"
+4 1 Номер версии
+5 1 Частота прерываний (для версий 10+).
+6 10 Неизвестно

Далее следуют строки байтов, начинающиеся с 0FFh или 0FEh. Байт 0FFh – маркёр начала прерывания. Если вслед за ним идёт байт от 0 до 15, то это номер регистра АY, в который произошёл вывод значения, следующего за этим байтом. Далее идёт следующая двойка байт, первый байт которой – номер регистра, а второй – значение. И так пока не встретится маркер следующего прерывания, конец файла или байт 0FEh. Байт, следующий за 0FEh, помноженный на 4 даст количество прерываний, в течении которых не было вывода на сопроцессор. Если в PSG-файле встретится номер регистра от 16 до 252 – не расстраивайтесь. Этот и следующий за ним байт можно просто проигнорировать (это вывод на другие устройства MSX).

Согласно документации RDOSPLAY, байт 253 является маркером конца музыки, но данный маркер не поддержан в данном Эмуляторе.
Немного дополнительной информации. Как удалось узнать, некоторые эмуляторы сохраняют более простой заголовок – только первые четыре байта, то есть вывод на AY начинает сохраняться уже со смещения +4. Данный же Эмулятор не приспособлен для загрузки PSG с таким заголовком, но в большинстве случаев такие PSG играются (конечно, теряются первые несколько выводов). Поэтому, если вы занимаетесь конвертированием модулей PSG, созданных с таким заголовком, в другие форматы (VTX или YM6) с помощью данного Эмулятора, вам нужно вручную подкорректировать заголовки этих PSG и привести их к описанному выше виду.

EPSG

Данные файлы создаются эмулятором Speccy “Z80 Stealth” Кирилла Колпакова (Mr.Kirill). В отличие от обычных PSG, EPSG хранит информацию не только о выводе в конкретные регистры, но и о времени вывода, в связи с чем, EPSG, также как OUT и ZXAY, может хранить вывод на AY с точностью до такта Z80.
Далее слегка отредактированный текст из z80s.faq:

Q: What is it - this EPSG format?
A: It's PSG format improved just a bit to handle output of digitized samples

Here's the description:

Offset Length Value

============================

Header

============================

0 4 'EPSG'
4 1 0x1A marker
5 1 Machine type: 0x00 - ZX Spectrum 128 0x01 – Pentagon
0xFF – Other machines
6 4 Zero for machine type 0x00 and 0x01 or
Number of Z80 tacts between interrupt markers
for other machines
10 6 zeroes

============================

AY(YM) log during 1 frame

============================

16 1 AY(YM) register number
17 1 value written to this register
18 3 T-state
.....
?? 5 0xFFFFFFFFFF - interrupt marker

rasmer
05.05.2009, 21:14
а протрекер не лучшели проиграть? хотя мне кажется щас начнётся холивар по поводу обхождения стороной других трекеров

ILoveSpeccy
05.05.2009, 22:54
Мне нужен самый "простой" формат хранения AY музыки
так как проигрываться он будет не процессором а напрямую из памяти
стэйт-машиной в FPGA.
Посмотрел описания разных форматов в хэлпе AY emul.
Формат PSG на мой взгляд очень хорошо для этого подходит.
Правдя пришлось его нечного "под себя" переделать.
2 минуты музыки упаковываются в 70кб.

Подробности позже, когда идея "заработает".

key-jee
05.05.2009, 23:15
PSG - очень удобный формат. В отличие от PT3 и прочих трекерных форматов его практически невозможно проиграть неправильно (например из-за неверной обработки команд плеером). К тому же не нужно делать абсолютно никаких вычислений. В противовес этому идёт только размер проигрываемого файла (хотя PSG пакуется неплохо)

rasmer
05.05.2009, 23:24
я высказал своё ИМХО, что протрахер лучшее...

spensor
06.05.2009, 14:16
Не знаю насчет простоты, но в природе ходят еще и .AY и .YM форматы, размерчик небольшой, и к треккерам кажется не привязаны.

key-jee
06.05.2009, 14:48
Мне нужен самый "простой" формат хранения AY музыки
так как проигрываться он будет не процессором а напрямую из памяти
стэйт-машиной в FPGA.
Посмотрел описания разных форматов в хэлпе AY emul.
Формат PSG на мой взгляд очень хорошо для этого подходит.
Правдя пришлось его нечного "под себя" переделать.
2 минуты музыки упаковываются в 70кб.

Подробности позже, когда идея "заработает".

Вообще-то 2 минуты на 70 кб это черезчур много. Это даже чистый дамп по 14 байт на фрейм выходит 82кб, а PSG намного компактнее: обычно 2 минуты в PSG занимает порядка 40-50 килобайт.