Итак, занялся вплотную звуками. Как сделать звуки? Как обычно: записать с микрофона удары молотком по рельсу на фоне отбойного молотка, в лучших традициях ранних Депешей. Но вот незадача — нужны звуки на AY, в виде всяких там периодов и частот шума. Поискал софт для создания звуков, нашел несколько редакторов. Но мои синусоиды, нарисованные в стиле импрессионизма, никаких вменяемых звуков не выдавали. Пришлось смотреть как сделаны другие «сэмплы», звучащие круто. Математический смысл вроде понятен. Но вот как взять и нарисовать звук «железных челюстей, с грохотом смыкающихся, с низкочастотным ударом и металлический звоном»? Фиг его знает. Но я в итоге нарисовал:
Замечательный редактор AY FX Editor крутого Shiru
Ок, звучание меня устроило. Вроде бы очень даже похоже и на удар и на звон такой с легким эхом:
Что с этим делать дальше? Редактор позволяет выгрузить звук в нескольких форматах: afx и двух вариантах текстового формата. В доке есть описание формата afx:
Формат одиночного эффекта, расширение .afx Каждое прерывание кодируется последовательностью байт, их количество может изменяться в зависимости от изменений значений тона/шума/громкости в текущем прерывании. Сначала идёт информационный байт: bit0..3 Громкость bit4 Запрещение T bit5 Изменение T bit6 Изменение N bit7 Запрещение N Если установлен bit5, далее следуют два байта со значением тона; если установлен bit6 - байт со значением шума; если установлены оба этих бита - сначала идёт значение тона, потом шума; если не установлен ни один - сразу идёт следующий информационный байт. Конец эффекта помечается последовательностью байт #D0,#20. Плеер должен определять её до вывода в регистры (сравнением значения шума на = #20). В редакторе за признак конца эффекта считается последнее ненулевое значение громкости, вне зависимости от остальных параметров.
Как я уже знал из различных док, примеров и ценных советов гуру, самый быстрый способ выводить звук на AY — писать в его регистры уже готовые данные, не вычисляя ничего на ходу. Иначе говоря, мне нужно было преобразовать мой AFX в PSG-формат. Порылся на просторах интернета — конвертера не обнаружил. Придется самому. Берем блокнот и декодируем:
-- 000 EF Инф байт 1110 1111 Громкость F (17) bit 4=0 разрешено Т bit 5=1 далее значит два байта со значением тона bit 6=1 и еще байт шума bit 7=1 запрещение шума 88 байт тона 210 0B байт тона 13 17 байт шума 27 -- 001 EE Инф байт 1110 1110 Громкость E (16) bit 4=0 разрешено Т bit 5=1 далее значит два байта со значением тона bit 6=1 и еще байт шума bit 7=1 запрещение шума 83 байт тона 203 0C байт тона 14 10 байт шума 20
Вколачиваю полученные значения в таблицу в исходник тестового «плеера», накиданного за 5 минут, которые просто хватает данные из этой таблицы и пишет в регистры 4,5,6,7,10 AY. Компилирую, запускаю — какое-то хрипение. Ну, особо никто и не надеялся, как всегда какой-то косяк. Ага, перепутал биты в канале управления регистра C. Исправляем, запускаем:
Оуууууееее!!
Теперь, правда, надо создать все другие звуки принца… А там, помимо бряцания и клацания, есть весьма непростые, типа перерубаемого принца, воплей падения и прочих звуков органического происхождения. Будем, значит, сочинять ))
Ну, и конвертер написать придется, а то на бумажке конвертить не очень интересно ))
Поздравляю! 🙂
И да, это классика:))
https://www.youtube.com/watch?v=yO0YjqMVAoo
Спасибо )) Именно это я и имел в виду ))