Pull to refresh

Comments 8

Вместо прямого доступа через порты ввода-вывода, значения для регистров звукогенератора сначала записываются в буфер в памяти, что кажется оверхедом.

Такой буфер нужен не только для кроссплатформенности, но и для реализации игровых звуковых эффектов — чтобы можно было прочесть содержимое регистра (с этим есть проблемы совместимости) и модифицировать его, не давая предыдущей записи оказать влияние на звук в промежутке между записями. Впрочем, в Dizzy IV эффектов на AY нет, но возможно есть в других играх с этим драйвером.

В оригинальном спектруме звукогенератор AY-3-8912 производил сигналы прямоугольной формы, которые раньше мне казались грубоватыми.

Программный генератор меандра в наивном виде (выводить в поток 0 или не 0 на частоте дискретизации) действительно звучит грубо, т.к. подвержен алиасингу. Чтобы звучало как реальный чип, нужно или использовать очень большой оверсемплинг с фильтрацией, либо делать band-limited генерацию. И то и другое слишком ресурсоёмко для Arduino, но для второго метода вполне срабатывает наивный трюк, когда фронт сигнала сделан просто сэмплом, повторяющим форму реального фронта меандра (набор синусоидальных гармоник). Это, пожалуй, по силам Arduino, но сомневаюсь, что такое улучшение будет заметно при использовании 8-битного ЦАП на ШИМ.

К слову, некоторое время назад портировал на Arduino биперный движок Fuzz Click, очень близкий к тому, который использовал Whittaker, в том числе в Dizzy 1-2 (тайна этого сходства до сих пор покрыта мраком, видимо кто-то у кого-то подсмотрел код генерации звука).
Не проще ли было сделать YM плеер с флешкой, блэкджеком и ш… Было бы универсальное устройство, нежели просто играть 2 мелодии.
Хотелось бы поправить автора в части авторства музыки с Magicland Dizzy. К сожалению на всех сайтах досадная ошибка, данный трек написан Lyndon Sharp. И по части редактора, музыку он писал на амиге в трекере, потом ноты конвертил на спектрум.
Спасибо за ценное замечание. Действительно, нашел вкладыш к оригинальной кассете, где указан Lyndon Sharp.

image
Круто, мне понравилось как звучит, можно ещё мелодий добавить, чтобы запхать на всю память Arduino Uno 32kb?
К сожалению, это не так просто, потому что код сильно завязан на структуру музыкальных данных, которая использовалась именно в Dizzy. Если будет другой плеер, придется проводить дизассемблирование заново. К тому же точность эмуляции AY-3-8912 в проекте достаточна, чтобы похоже воспроизводить данные мелодии, но ее будет мало для других мелодий.
Плееры всех популярных пост-советских форматов AY-музыки (PT1-3, STC, STP и другие) были однажды переписаны на C и доступны в исходниках библиотеки ayfly. Около 25 тысяч треков в этих форматах есть в коллекции TrSongs.
Спасибо. Действительно тогда есть возможность решить задачу, но, кажется, для этого лучше взять более зрелый эмулятор AY-3-8912.
Sign up to leave a comment.