Phaser2 в 1tracker
То, чего давно ждали немногие энтузиасты, наконец свершилось — появился редактор для биперного движка Phaser2, разработанного ещё в 2011 году и до сих пор никем ни разу не использованного. К сожалению, это не Beepola, а всего лишь 1tracker, но уже лучше, чем ничего. Напомню, по причине использования в движке гибко настраиваемых тональных инструментов и ударных конвертор из XM или других форматов не имел бы практического смысла.
Скачать 1tracker
В текущей версии 1tracker движок Phaser2 выбран по умолчанию. Формат редактора паттерна и назначение полей в каналах в целом остались прежними и действуют аналогично Phaser1 (в Beepola и 1tracker), только вместо одного канала с поддержкой инструментов теперь есть два.
Другие важные изменения коснулись самих инструментов и ударных. Чтобы попасть в редактор инструментов, нажмите F4. При этом если курсор находился в канале тона, откроется редактор тонального инструмента (до 63 штук), иначе откроется редактор ударного инструмента (8 штук). Чтобы переключаться между инструментами в редакторе используйте Numpad ±, чтобы менять значения — стрелки влево-вправо или Enter и непосредственный ввод цифры.
В тональных инструментах произошла замена параметра Multiple на Semitone — теперь можно задавать не только повышение тона второго генератора на N октав, но и другие смещения в полутонах, что даёт своеобразные тембры. Уменьшился диапазон параметра Detune, так как его компенсирует Semitone. Появился параметр режима смешивания каналов — в Phaser1 был только XOR, теперь также доступны OR и AND, что помогает создавать новые тембры.
Полностью переделаны ударные инструменты. Как и раньше, они прерывают звук тональных каналов, но теперь вместо предопределённого набора сэмплов или сомнительных генерируемых кодом звуков есть возможность настраивать характер звучания. Новые ударные могут иметь разную длительность, она компенсируется в тональных каналах для удержания стабильного темпа. Можно задать начальную высоту тона и скорость слайда вниз или вверх, либо выключить тон, установив высоту в 0. Также можно задать частоту шума или выключить его.
Для удобства использования новой системы ударных в движке по умолчанию настроен джентльменский набор из бочки, малого, двух хэтов и четырёх томов.
Скачать 1tracker
В текущей версии 1tracker движок Phaser2 выбран по умолчанию. Формат редактора паттерна и назначение полей в каналах в целом остались прежними и действуют аналогично Phaser1 (в Beepola и 1tracker), только вместо одного канала с поддержкой инструментов теперь есть два.
Другие важные изменения коснулись самих инструментов и ударных. Чтобы попасть в редактор инструментов, нажмите F4. При этом если курсор находился в канале тона, откроется редактор тонального инструмента (до 63 штук), иначе откроется редактор ударного инструмента (8 штук). Чтобы переключаться между инструментами в редакторе используйте Numpad ±, чтобы менять значения — стрелки влево-вправо или Enter и непосредственный ввод цифры.
В тональных инструментах произошла замена параметра Multiple на Semitone — теперь можно задавать не только повышение тона второго генератора на N октав, но и другие смещения в полутонах, что даёт своеобразные тембры. Уменьшился диапазон параметра Detune, так как его компенсирует Semitone. Появился параметр режима смешивания каналов — в Phaser1 был только XOR, теперь также доступны OR и AND, что помогает создавать новые тембры.
Полностью переделаны ударные инструменты. Как и раньше, они прерывают звук тональных каналов, но теперь вместо предопределённого набора сэмплов или сомнительных генерируемых кодом звуков есть возможность настраивать характер звучания. Новые ударные могут иметь разную длительность, она компенсируется в тональных каналах для удержания стабильного темпа. Можно задать начальную высоту тона и скорость слайда вниз или вверх, либо выключить тон, установив высоту в 0. Также можно задать частоту шума или выключить его.
Для удобства использования новой системы ударных в движке по умолчанию настроен джентльменский набор из бочки, малого, двух хэтов и четырёх томов.
14 комментариев
Вопрос по касательной — раз обновилась версия 1tracker, нет ли желания обновить движки немного? Дело в том, что тесты клавиатуры в нескольких движках (Phaser2, Octode) могут работать ненадёжно на машинах с плавающей шиной. Я могу сделать поправки в коде, там всё довольно тривиально в общем, просто чтобы потом не фиксить индивидуальные треки.
К слову, может быть заодно добавить и Octode XL?
а собственно проверка — такая:
Главная проблема с этим такая: на машине без кемпстона in a,(#1f): and #1f, как правило, не ноль, так что 5 из 8 линий клавиатуры исключаются из опроса. Что особенно противно, in a,(#1f) может ещё и читать атрибуты/пикселы с плавующей шины и разрешать опрос нужной клавиши, так что опрос часто всё ещё работает, но очень плохо предсказуемо. Наконец, на машине с плавающей шиной in a,(#1f): and #1f может запросто выдать Z (допустим на чистом экране залитом чёрным по чёрному с шины читается довольно много нулей). При таком неудачливом раскладе движок вообще будет считать что клавиатура нажата почти всё время (т.е. всё время, когда in a,(#1f) сбрасывает нужные нам биты).
В Phaser2 основная проблема устранена ( in a,(#1f): ld c,a: xor a ), но тест кемпстона всё ещё не вполне надёжен. В Octode XL я сделал вот так:
и собственно опрос
Проблем вроде пока не видел. Ещё в QChan была какая-то похожая проблема (столкнулся, когда собирал Dat Fuzz вместе с utz), но, емнип, там вообще опрос был немного редковат, так что там я просто развёл опрос клавиатуры и джойстика.
Я был бы очень рад если бы Octode XL появился в 1tracker. К сожалению, я слегка поправил там формат музыки (основное соображение было ничтожно ускорить переход от строки к строке и добавить ещё одну низкую ноту), так что совсем прямолинейная замена не получится. Но модификации очень простые, я даже сознательно не стал менять расчёт высоты нот, т.к. это убило бы старые октодовские треки, настроенные детьюном.
Есть много решений этой проблемы, но все они неудобные и некрасивые.
Можно добавлять в AY-файл полное ПЗУ (в последнее время так и делаю) и попытаться заставить работать обычный обработчик прерывания. Можно нагородить пустой IM2 где-нибудь в экранной области. И то и другое приведёт к двум веткам генерации кода — одна для трекера, вторая для экспорта, а этого очень хочется избежать. Сейчас всё просто (затрачены значительные усилия, чтобы осуществить эту схему): один ассемблерный исходник движка плюс ассемблерный вывод компилятора музыки — ассемблер — бинарник — AY-файл — опционально TAP/SCL; на всех этапах может делаться экспорт; тот же самый AY-файл играется редактором.
Можно было бы сделать условную компиляцию этого halt'а. Но её в моём ассемблере нет, и добавить — перекопать 1500 строк на AngelScript, написанных два года назад. Конечно, по-хорошему этот ассемблер требует переписывания с нуля, но это тяжёлая задача. Можно сделать хак, собирать исходник движка из двух кусков текста, вставляя между ними строку с halt при сборке не для AY-файла — опять же см. выше, и само по себе очень некрасиво.
Можно отдать определение Kempston'а на усмотрение программиста, брать на входе ещё один регистр, помимо указателя на данные музыки. Тоже сомнительное решение.
Поэтому пока мысли либо убрать опрос вообще, чтобы избавиться от головной боли, либо закомментировать определение в исходнике, и кому нужна поддержка, пусть экспортирует исходник и раскомментирует. Но тогда проблема глючного опроса в экспортированных TAP/SCL останется.
Исходник модифицированного конвертора xm2octodexl.cpp лежит там в папке «other».
Но я совершенно в этом не разбираюсь. Для меня загадка, как вы всё это делаете.
Поэтому просто спасибо.