PDA

Просмотр полной версии : Работа с трекерными модулями на ZX



Bulba
29.01.2005, 13:50
Я решил создать эту тему для освещения кое-какой своей работы на ZX. Надеюсь, на уже проделанном не остановлюсь.

1. На ZX до недавнего времени существовала проблема правильного проигрывания произвольного модуля PT3. За все время существования PT3 было семь нотных таблиц, две таблицы громкости, сменилась команда портаменто. Казалось бы, старые модули можно играть старыми плеерами и проблем не будет, но когда мы начинаем анализировать ошибки, найденные и испраленные MMCM'ом и Alone Coder'ом, становится понятно, что это не выход. А при проигрывании самыми последними версиями плеера старых модулей, всплывают и другие проблемы (не считая вышеперечисленных). Например, попробуйте проиграть без перекомпиляции Chuta.pt3 Мигеля в BestView. В общем, надоело мне наблюдать эту печальную картину, и я написал свой универсальный плеер. В пике на сложном модуле он тратит 9500 тактов, размер меньше 1,6 кб, ошибок в проигрывании за полгода тестирования не замечено. http://bulba.at.kz/VTIIPT3ZXPlayer.7z

2. Вчера вечером вдруг пришла мысль, что за последние несколько лет уже много раз отсылал людей к исходникам Ay_Emul по поводу подсчета продолжительности PT3 модуля на ZX. А результата-то нет! То ли всем нужен уже готовый результат, то ли не так оно и нужно вообще, но тем не менее держите результат нескольких часов работы: http://bulba.at.kz/PT3Time.7z Данный исходник переделан из вышеуказанного плеера методом его упрощения. Алгоритм такой же как и в Ay_Emul (функция GetTime). Идея такова - играем модуль с максимально возможной скоростью до момента перехода на цикл. Вопреки ожиданиям, метод даже на Z80 работает очень быстро (в среднем доли секунды, на очень длинных модулях типа 'Spleen' Nik'о - около секунды). Оптимизации пока никакой нет, но уже сейчас все достаточно симпатично - около 300 байт. Для скорости пришлось убрать проверки целостности модуля и защиту от зацикливания на сбойных данных.

Кому интересна эта тема, пишите. У меня еще много идей такого рода, было бы время. Например, можно сделать новые плееры для PT2, ASM и т.д. Тем более, что в некоторых из них ошибки так до сих пор и не исправлены и вряд ли кто будет исправлять. А мне проще написать свое с нуля ;)

PheeL
29.01.2005, 17:05
Ммм... Не знаю поднималась ли эта тема (а скорее всего неоднократно поднималась), но хотелось бы услышать мнение об ошибках в проигрывании (не только этих) stp модулей :
Authors\Mic\REFRESH.stp - ударники вместо другого инструмента вначале
Authors\Mic\UUU.stp - отсутствие ударников в середине модуля
Authors\Imp\IMP54.stp - ошибки в ударных

Это ошибка плейера Sound Tracker Pro (видать KSA что-то налевил), я ещё на живом Спектруме это проверял. В самом-то редакторе всё правильно играет. Можно как-нибудь подправить?


P.S.
Authors\Imp\VIBRATE.pt2
Authors\Imp\U_S.stc
- это модули VMP (который потом Evolver) , что они делают в папке Импа?

Bulba
29.01.2005, 19:41
Ммм... Не знаю поднималась ли эта тема (а скорее всего неоднократно поднималась),

Поднималась ;) Я несколько раз об этом где-то говорил.


Authors\Mic\REFRESH.stp - ударники вместо другого инструмента вначале

После компиляции исчез номер сэмпла - ошибка компилятора. Вместо него играется первый (пояснения ниже).


Authors\Mic\UUU.stp - отсутствие ударников в середине модуля

Опять ошибка компилятора, исчезли некоторые команды установки громкости, в результате действует громкость 4, установленная чуть раньше.


Authors\Imp\IMP54.stp - ошибки в ударных

Опять компилятор - исчезли команды отключения огибающих (видимо компилятор отсеивает повторяющиеся орнаменты, но забывает, что они еще глисы и огибающие выключают, если включено).


Это ошибка плейера Sound Tracker Pro (видать KSA что-то налевил), я ещё на живом Спектруме это проверял.

Нет, в плеере я таких грубых ошибок не находил, это ошибка именно компилятора.


В самом-то редакторе всё правильно играет. Можно как-нибудь подправить?

Я сам долго думал, что делать с такими модулями, и, к счастью, решение есть. Конечно, сделать плеер некомпилированных STP можно (я еще эту идею не отверг до конца). Но пока я выкрутился так: облазил кучу сайтов и скачал все редакторы Sound Tracker Pro (только авторского производства, вроде есть еще и чужие фиксы/римейки). И среди них обнаружился редактор с нормальным компилятором (без таких ошибок). Единственный недостаток - получающие STP несколько больше по размеру (иногда заметно больше), т.к. видимо в этом компиляторе практически полностью отсутствует "умный" отсев не влияющих на звук данных.

Не знаю, какой вариант редактора был исторически первый (с ошибкой в компиляторе, или нет), нет никаких зацепок ни по датам выпуска, ни по версиям.

Папку KSA и IMP я уже полностью перекомпилировал, правда те модули, которые генерят одинаковые PSG (т.е. звучат один к одному), я оставил старые, так как они все-таки меньше по размеру.

Почему-то прозевал некоторые модули IMP'а, у меня есть целый TRD его некомпилированных модулей. Что ж, будет чем заняться на выходных ;) Перекомпилирую к следующей версии.

Пока прилагаю перекомпилированный IMP54.stp

Насчет MIC сложнее, я порылся у себя в архиве, его некомпилированной музыки у меня нет. Если пришлешь - исправлю обязательно :)

Про SUMEA_FN.stp Visual'а я уже просто молчу, видимо найти некомпилированный модуль уже не получится... Если у кого есть, киньте.


Authors\Imp\VIBRATE.pt2
Authors\Imp\U_S.stc
- это модули VMP (который потом Evolver) , что они делают в папке Импа?

Они ждали, когда кто-нибудь из заметивших это, сообщит мне ;)

Спасибо, первое удалил (есть ST), второе перекинул, VMP переместил в Evolver.

PheeL
30.01.2005, 00:00
Нет, в плеере я таких грубых ошибок не находил, это ошибка именно компилятора.
Извиняюсь. Я наивно грешил на плейер, ессно внутрь не лазая и не разбираясь.

Я сам долго думал, что делать с такими модулями, и, к счастью, решение есть. Конечно, сделать плеер некомпилированных STP можно (я еще эту идею не отверг до конца). Но пока я выкрутился так: облазил кучу сайтов и скачал все редакторы Sound Tracker Pro (только авторского производства, вроде есть еще и чужие фиксы/римейки). И среди них обнаружился редактор с нормальным компилятором (без таких ошибок). Единственный недостаток - получающие STP несколько больше по размеру (иногда заметно больше), т.к. видимо в этом компиляторе практически полностью отсутствует "умный" отсев не влияющих на звук данных.
Не знаю, какой вариант редактора был исторически первый (с ошибкой в компиляторе, или нет), нет никаких зацепок ни по датам выпуска, ни по версиям.
Опять же, если мне не изменяет память - обратная декомпиляция музыкального модуля в редактор решала проблему. значит есть возможность для правильного проигрывания неправильных модулей %)

Насчет MIC сложнее, я порылся у себя в архиве, его некомпилированной музыки у меня нет. Если пришлешь - исправлю обязательно :)
Дай бог если диск сохранился. Я на болванки не отписывал исходник, если на винте осталось - брошу.
Небольшая историческая справка :) - MIC писал только в KSA-шной версии Sound Tracker Pro.

Они ждали, когда кто-нибудь из заметивших это, сообщит мне ;)
Спасибо, первое удалил (есть ST), второе перекинул, VMP переместил в Evolver.
Угу :p Насчет VIBRATE я ещё в демке посмотрю чей, но если мне не изменяет память, то это всё-таки именно Evolver.

C-jeff
30.01.2005, 00:12
Угу :p Насчет VIBRATE я ещё в демке посмотрю чей, но если мне не изменяет память, то это всё-таки именно Evolver.

Все верно - первый и третий треки IMP'а, второй (главная тема) - Evolver'а.

Bulba
30.01.2005, 06:36
Все верно - первый и третий треки IMP'а, второй (главная тема) - Evolver'а.

Исправил. Я кстати уже полностью раскидал известное по авторам, так что следующая версия Tr_Songs будет почти вся в Authors.

Bulba
30.01.2005, 06:42
Опять же, если мне не изменяет память - обратная декомпиляция музыкального модуля в редактор решала проблему. значит есть возможность для правильного проигрывания неправильных модулей %)

Я, когда писал декомпилятор в Vortex Tracker II, не заметил, где может храниться теряющаяся при компиляции информация. Даже при ручном восстановлении потерянного, иногда бывает несколько вариантов ;)


Угу :p Насчет VIBRATE я ещё в демке посмотрю чей, но если мне не изменяет память, то это всё-таки именно Evolver.

Если мне не изменяет память, в демке написано кто писал музыку, но не написано, кто что именно писал. Хотя может я с чем то и путаю...

Bulba
05.02.2005, 15:20
Как обещал, перекомпилировал музыку IMP'а в другом редакторе STP. В прилагаемом архиве то, что нужно заменить в Tr_Songs. Если у кого есть не битые модули из папки bad, просьба прислать.

Spectre
05.02.2005, 20:11
Кому интересна эта тема, пишите. У меня еще много идей такого рода, было бы время. Например, можно сделать новые плееры для PT2, ASM и т.д. Тем более, что в некоторых из них ошибки так до сих пор и не исправлены и вряд ли кто будет исправлять. А мне проще написать свое с нуля ;)

Меня регулярно просят сделать проигрывание PT2 мелодий в Quick Commander. То есть это по-прежнему актуально. Поскольку сам плэйер PT2 совсем не маленький, у меня есть 2 предложения:

1) Универсальный плэйер PT2&PT3 (если конечно такое возможно, но все-таки и то, и то ProTracker...)
2) Компактный конвертер PT2>PT3

Сам я очень далек от форматов ProTracker'а, поэтому хочу спросить насколько вышенаписанное реально?

Bulba
06.02.2005, 07:33
1) Универсальный плэйер PT2&PT3 (если конечно такое возможно, но все-таки и то, и то ProTracker...)
2) Компактный конвертер PT2>PT3


И первое, и второе требует в первом приближении одиноковое количество памяти под коды. Поэтому лучше сделать первое, так как второе требует еще и времени перед началом проигрывания (думаю, несколько секунд как минимум на Z80). Хорошо, я наверное возьмусь, к тому же в стандартном плеере PT2 есть грубая ошибка с портаменто (см. Epilogue.pt2 от Nik-O).

Spectre
06.02.2005, 15:23
И первое, и второе требует в первом приближении одиноковое количество памяти под коды. Поэтому лучше сделать первое, так как второе требует еще и времени перед началом проигрывания (думаю, несколько секунд как минимум на Z80). Хорошо, я наверное возьмусь, к тому же в стандартном плеере PT2 есть грубая ошибка с портаменто (см. Epilogue.pt2 от Nik-O).

Это было-бы замечательно, толпа людей (Spectre, Pawel/RS, Himik, Ivan Roshin, AlCo, ...) выстроились бы в очередь тебя поблагодарить. ;)

Bulba
06.02.2005, 16:38
Это было-бы замечательно, толпа людей (Spectre, Pawel/RS, Himik, Ivan Roshin, AlCo, ...) выстроились бы в очередь тебя поблагодарить. ;)

:) Для начала будет отдельный плеер. После объединения будет экономия хотя бы за счет табличек нот (кстати, только что в AY_Emul поправил - две одинаковые таблички держал зачем-то) и вроде новая табличка громкости в PT3 такая же, как в PT2 (еще надо уточнить). Далее, выборку нот можно сделать общей и расчет параметров портаменто. В общем много точек соприкосновения. Надеюсь, универсальность не слишком замедлит существующий плеер PT3. Кстати, в плеер PT2 возможна громкость 0. Кто-нибудь писал в PT2-редакторе, он разрешает нулевые громкости ставить? Если да, придется 16 нулевых байт добавить в табличку громкости.

В общем, предварительный анализ проблемы сделан, с понедельника сажусь за ZXASM by AIG ;)

Bulba
11.02.2005, 17:20
Ура! Несколько дней чисто теоретического программирования закончились удачно - при первом же тесте новый PT2-плеер заиграл на слух правильно, даже отладки не понадобилось. Сейчас слушаю "NY tHEMEs gR8 MiX bY zHenYa/0!" и радуюсь. В общем, пока без оптимизации и прочего плеер занимает меньше 1Кб. Правда, еще нужно добавить в INIT rollback для PT2.4f, но уже понятно, что размер будет порядка тысячи байт. Сразу вопрос Spectre'у: нужно ли объединять PT3 и PT2 плеер? 1,6+1=2,6 кб - и так достаточно мало? Если нужно, то я могу объединить, немного пожертвовав скоростью в пользу наибольшей компактности.

Bulba
11.02.2005, 17:25
Да, хочу поблагодарить всех, кто ответил по поводу громкости 0 в PT2 :( Видимо здесь только newgeneration присутствует. Или все-таки есть люди, писавшие в PT2?

Spectre
11.02.2005, 20:23
Ура! Несколько дней чисто теоретического программирования закончились удачно - при первом же тесте новый PT2-плеер заиграл на слух правильно, даже отладки не понадобилось. Сейчас слушаю "NY tHEMEs gR8 MiX bY zHenYa/0!" и радуюсь. В общем, пока без оптимизации и прочего плеер занимает меньше 1Кб. Правда, еще нужно добавить в INIT rollback для PT2.4f, но уже понятно, что размер будет порядка тысячи байт.

Yep! А я уже хотел тактично намекнуть, что мы плэйер ждем. :)


Сразу вопрос Spectre'у: нужно ли объединять PT3 и PT2 плеер? 1,6+1=2,6 кб - и так достаточно мало? Если нужно, то я могу объединить, немного пожертвовав скоростью в пользу наибольшей компактности.

Конечно надо! Держать и вызывать разные плэйеры, совсем не то же самое что один единственный. Тем более если они вместе будут чуть больше 2Кб занимать - совсем мизер. Будет как бесплатный довесок для VTII player'а умение играть PT2 мелодии. :)

Spectre
11.02.2005, 20:26
Да, хочу поблагодарить всех, кто ответил по поводу громкости 0 в PT2 :( Видимо здесь только newgeneration присутствует. Или все-таки есть люди, писавшие в PT2?

Скорее всего тут действительно нет музыкантов пишущих в PT2. Я, например, только Fatal Snipe знаю из современных музыкантов PT2 only.

key-jee
11.02.2005, 23:42
Кстати, в плеер PT2 возможна громкость 0. Кто-нибудь писал в PT2-редакторе, он разрешает нулевые громкости ставить?Вообще-то подобный вопрос нужно спрашивать не в кодерской ветке ;) но вроде не разрешает, я в pt2 начинал - такой возможности не помню..

Bulba
12.02.2005, 17:09
Вообще-то подобный вопрос нужно спрашивать не в кодерской ветке ;) но вроде не разрешает, я в pt2 начинал - такой возможности не помню..

Спасибо, хотя в общем-то уже поздно ;) - на всякий случай добавил 16 нулей для нулевой громкости. К следующему релизу постараюсь проверить в редакторе, а пока переменные будут на 16 байт длиннее. В плеере и формате еще и нулевой сэмпл теоретически можно использовать, и нулевой орнамент может быть user-defined :)

Bulba
12.02.2005, 17:22
Конечно надо! Держать и вызывать разные плэйеры, совсем не то же самое что один единственный. Тем более если они вместе будут чуть больше 2Кб занимать - совсем мизер. Будет как бесплатный довесок для VTII player'а умение играть PT2 мелодии. :)

:) Сомневаюсь, что удастся впихнуть в 2к, но стремиться нужно :) В общем, думаю, поступим как и PT3-плеер - общими усилиями доведем PT2-плеер до оптимума, а потом уже начну объединять. Всем желающим принять участие ссылка: http://bulba.at.kz/UniPT2Player.7z

Поддержка PT2.4 Phantom Family сделана прозрачно: загружается как и простые PT2 по любому удобному адресу, после вызова INIT он превращается в обычный PT2, так что можно плеер и как конвертер использовать. Также как и в PT3-плеере, никаких проверок на целостность модуля нет, ответственность за корректность возлагается на вызывающаю программу.

P.S. Выражается благодарность за помощь в оптимизации предыдущего проекта Ивану Рощину, AlCo и Spectre. Почти все, что можно взято из VTIIPT3-плеера - это с одной стороны и помогало, и мешало, так как свело творчество к минимуму (обычная рутина типа cut'n'paste).

Spectre
13.02.2005, 00:35
:) Сомневаюсь, что удастся впихнуть в 2к, но стремиться нужно :) В общем, думаю, поступим как и PT3-плеер - общими усилиями доведем PT2-плеер до оптимума, а потом уже начну объединять. Всем желающим принять участие ссылка: http://bulba.at.kz/UniPT2Player.7z

Я глянул плэйер, так у него довольно много общих частей с PT3 плэйером. Так что 2.1-2.3 я думаю будет.

Завтра попробую оптимизнуть.


Поддержка PT2.4 Phantom Family сделана прозрачно: загружается как и простые PT2 по любому удобному адресу, после вызова INIT он превращается в обычный PT2, так что можно плеер и как конвертер использовать. Также как и в PT3-плеере, никаких проверок на целостность модуля нет, ответственность за корректность возлагается на вызывающаю программу.

P.S. Выражается благодарность за помощь в оптимизации предыдущего проекта Ивану Рощину, AlCo и Spectre. Почти все, что можно взято из VTIIPT3-плеера - это с одной стороны и помогало, и мешало, так как свело творчество к минимуму (обычная рутина типа cut'n'paste).

У меня был некий PT2.4, я его сейчас попытался найти, но не нашел. Зато нашел от него плэйер (см. вложение). Посмотри, совпадает ли он с твоим 2.4.

Сегодня вставил PT2 плэйер в квик, так убедился что надо единый плэйер делать: разные адреса таблицы анализаторов, позиций, названия мелодии, ... Куча лишних пересчетов иначе получается.

Vitamin
13.02.2005, 01:14
2Bulba:
посмотри музон Authors\CAT-MAN\stracker.stc
он еще шел зашитым внутри одной из версий ST. так вот, он неправильно импортировался PT2 и PT3 (в частности ударные в начале врали безбожно). реала у меня давно нет, забыл как это должно звучать на самом деле :) хотелось бы узнать, сейчас воспроизведение этого музона в порядке?

и ишшо: можно ли сделать в плеере поддержку 3.5мгц тактовой частоты?

Bulba
13.02.2005, 06:20
У меня был некий PT2.4, я его сейчас попытался найти, но не нашел. Зато нашел от него плэйер (см. вложение). Посмотри, совпадает ли он с твоим 2.4.

Мне не с чем сравнивать ;) Вернее есть, но я никогда не смотрел плеер от Phantom Family. Там же обычный PT2-формат модуля, просто адреса сэмплов, орнаментов и каналов паттернов не относительные, а абсолютные (т.е. модуль привязан к определенному адресу, я сейчас даже затрудняюсь сказать, когда именно осуществляется привязка - во время ихнего INIT, или еще в компиляторе).


Сегодня вставил PT2 плэйер в квик, так убедился что надо единый плэйер делать: разные адреса таблицы анализаторов, позиций, названия мелодии, ... Куча лишних пересчетов иначе получается.

Да, насчет позиций наверное потом лучше сделать простой счетчик, как ты и хотел раньше. А с названием - про него плеер ничего не знает. Также как не будет знать, что ты ему подсунешь - PT3 или PT2, функции детекта формата надо делать вне плеера.

Такой вариант устроит:

LD A,ТипМодуля ;0 - PT3, 1 - PT2
CALL START

?

Bulba
13.02.2005, 07:54
2Spectre:
Вот, нашел у себя PT2.4PhF. Тот, что ты посылал, это обычный PT2. А в PhF уже на стадии компиляции модуль жестко привязывается к адресу компиляции, плюс можно выбрать ABC или ACB раскладки. Отличить модуль PhF от обычного PT2 очень просто - достаточно посмотреть адрес "нулевого" сэмпла: в стандартном PT2 он равен нулю (так как не используется), а в 2.4 PhF - некоторому ненулевому значению, которое дефакто и является адресом компиляции модуля. Достаточно отнять этот адрес от всех упомянутых выше указателей, чтобы модуль стал обычным PT2.

Bulba
13.02.2005, 08:11
посмотри музон Authors\CAT-MAN\stracker.stc

Я проверил в Vortex Tracker II (там прозрачный импорт в PT3 формат), вроде ошибок нет. Так что дело не в модуле, а в спектрумовских конвертерах-импортерах ;)

Гораздо интереснее этот модуль: Tr_Songs.7z/Other\Zx-music\STINOL.stc

Он защищен от декомпиляции хитрым методом - все орнаменты (включая нулевой) смещают ноты на N ступенек, а для того, чтобы звучал нормально, вроде применена транспозиция всех патернов на теже N ступенек обратно. В результате, после декомпиляции, все ноты, которые играются с нулевым орнаментом, смещаются относительно других нот на N ступенек - получается какофония ;)


и ишшо: можно ли сделать в плеере поддержку 3.5мгц тактовой частоты?

3 МГц можно. А вот больше - нужно в исходниках поправить проверку допустимого диапазона. Только надо следить, чтобы в целочисленной арифметике (вещ. с фикисрованной точкой) не происходило переполнения. При 3 Мгц пепеполнения не происходит, а вот выше - на твой страх и риск ;)

MadCat!
13.02.2005, 14:36
я вот давно такую штуку в плеере хочу: чтоб в где-то в памяти фиксировались номера семплов для каждого канала (а еще неплохо и флаг начала проигрывания сэмпла: т.е. как только сэмпл играет первый инт, там 1, следующий инт - 0). Это всё нужно для того, чтоб можно было фиксить эффекты не по счетчику времени, а по определенным сэмплам, например, под ударные и т.д. Вообще, можно более универсальную "цветомузыку" ;) сделать.

2 Sergey Bulba: такое в плеере будет? или оно никому больше не нужно? ;)

Spectre
13.02.2005, 15:08
Да, насчет позиций наверное потом лучше сделать простой счетчик, как ты и хотел раньше. А с названием - про него плеер ничего не знает. Также как не будет знать, что ты ему подсунешь - PT3 или PT2, функции детекта формата надо делать вне плеера.

Такой вариант устроит:

LD A,ТипМодуля ;0 - PT3, 1 - PT2
CALL START

?

Лучше наоборот:
CALL START
LD A,(PLAYER+10)
BIT n,A ;Тип Модуля 0 - PT3, 1 - PT2

:)

Для проигрывания и вывода инфы о мелодии нужно:

1. Адрес таблицы громкости. Если плэйер будет единый эта таблица будет располагаться по фиксированному адресу (сейчас по разным).
2. Адрес с позициями мелодии. Он нужен для вычисления длины мелодии в позициях и текущей позиции (для LD HL,(START+11):LD DE,-PT2ModuleAddress-131: ADD HL,DE). Можно сделать как длина мелодии в (PLAYER+11) и счетчик (PLAYER+12,13).
3. Бит отображающий какой PT (2,3) у нас мелодия определилась (в PLAYER+10). Это нужно для вывода информации о мелодии.

Vitamin
13.02.2005, 22:09
3 МГц можно. А вот больше - нужно в исходниках поправить проверку допустимого диапазона. Только надо следить, чтобы в целочисленной арифметике (вещ. с фикисрованной точкой) не происходило переполнения. При 3 Мгц пепеполнения не происходит, а вот выше - на твой страх и риск ;)
3 Mhz можно и влоб поставить в настройках. интересует именно 3.5 как на некоторых реалах (в частности у меня так было). на эмуле такой фич возможен.

Bulba
14.02.2005, 03:56
Лучше наоборот:
CALL START
LD A,(PLAYER+10)
BIT n,A ;Тип Модуля 0 - PT3, 1 - PT2


Не, плеер я готов написать, а вот детектор - это пусть внешняя программа занимается, все равно она после загрузки файла анализирует его и решает, вызывать или не вызывать. Задача детекта неоднозначна, я за такое не возьмусь ;)


Для проигрывания и вывода инфы о мелодии нужно:
1. Адрес таблицы громкости. Если плэйер будет единый эта таблица будет располагаться по фиксированному адресу (сейчас по разным).

Не факт, но если надо именно так, то сделать можно.


2. Адрес с позициями мелодии. Он нужен для вычисления длины мелодии в позициях и текущей позиции (для LD HL,(START+11):LD DE,-PT2ModuleAddress-131: ADD HL,DE). Можно сделать как длина мелодии в (PLAYER+11) и счетчик (PLAYER+12,13).

Длину мелодии брать из формата (тут плеер не причем), а в +11 можно сделать просто счетчик позиций, хотя это тоже лишне. Я хочу написать плеер, а детект, визуализация и прочее - это уже каждый по своему все равно будет делать. Тебе достаточно счетчика позиций, кому-то нужно отслеживать сэмплы, кто-то хочет сделать счетчик строк - можно множество подобных идей реализовать. Мне хочется заниматься только проигрыванием.


3. Бит отображающий какой PT (2,3) у нас мелодия определилась (в PLAYER+10). Это нужно для вывода информации о мелодии.

Определяка внешняя, тут я уже высказался. Как сделаешь, так и будет ;) В PLAYER+10 будет просто копия того, что внешняя программа и так уже знает.

Bulba
14.02.2005, 04:15
я вот давно такую штуку в плеере хочу: чтоб в где-то в памяти фиксировались номера семплов для каждого канала

Это можно сделать, могу подсказать, где какие команды добавить ;)


(а еще неплохо и флаг начала проигрывания сэмпла: т.е. как только сэмпл играет первый инт, там 1, следующий инт - 0).

Ну, это уже почти в таком виде есть - Position In Sampe. В начале там ноль, потом инкеремент. Правда loop тоже может его обнулять. В общем то, если надо, подскажу где чего добавить ;)


Это всё нужно для того, чтоб можно было фиксить эффекты не по счетчику времени, а по определенным сэмплам, например, под ударные и т.д. Вообще, можно более универсальную "цветомузыку" ;) сделать.

Ну в общем то, все что ты перечислил реализуемо с любым плеером после небольшой модификации ;)


2 Sergey Bulba: такое в плеере будет? или оно никому больше не нужно? ;)

Ну мое мнение однозначно - прикладные задачи решает тот программист, который использует плеер в конечном продукте. На всех не угодишь, а если попытаться, то потеряем компактность и замедлим еще больше, и... все равно кому-то чего-то не хватит ;) Может я и не прав, но лично я за большее, чем просто плеер, не возьмусь, не хочу, чтобы удовольствие от программирования утонуло в рутине :)

Оставим вне "стандартного" плеера детект, визуализацию, раскладку каналов, нивелирование различий AY/YM, подсчет длины модуля, да мало ли чего может еще понадобиться ;)

Bulba
14.02.2005, 04:21
3 Mhz можно и влоб поставить в настройках. интересует именно 3.5 как на некоторых реалах (в частности у меня так было). на эмуле такой фич возможен.

К следующей версии проверю - если переполнения не происходит, то увеличю диапазон до 3.5. Про исходники я не зря сказал - это наиболее реальный вариант на данный момент (чтобы не ждать следующую версию).

Spectre
25.02.2005, 23:27
В поддержку нового проекта от Sergey Bulba (автора AY Emul) универсального плэйера PT2+PT3 мелодий, я написал универсальный детектор, который ищет по сигнатуре мелодии обоих версий протракеров. Поиск осуществляется по общим для двух форматов критериям:

1) Temp=1..#3f
2) Длина в позициях != 0
3) Длина в позициях > номер позиции для зацикливания
4) (Список патернов)-1 = #FF (то есть конец таблицы позиций)
5) (Таблица позиций)+(длина в позициях) = (список патернов)
6) Описатели сэмплов (#40 байт) и описатели орнаментов (#20 байт)
должны "нарастать" или быть равны нулю.

При удовлетворении найденного модуля всем этим критериям определяем к какой версии PT нужно отнести модуль.

Получилась достаточно короткая процедура - 119 байт и достаточно быстрая. На выходе выдает адрес начала мелодии, длину в позициях, тип мелодии (PT2, PT3). Предлагаю всем заинтересованным в ее дальнейшем использовании предложить пути ускорения/оптимизации/улучшения процедуры. Исходный текст:



----------------------------------------------------------------
;PT2 and PT3 universal searcher by Spectre
;IN: HL-Start address, BC-Length.
;OUT: HL-Song start address, BC-Length (positions), A: 0-PT2, 1-PT3.
LD HL,#6000
LD BC,#A000
FINDPT LD A,B
OR C
RET Z; Not found
LD A,(HL) ;Temp
OR A
JR Z,FPTEND3
CP #40
JR NC,FPTEND3
PUSH HL
INC HL
LD A,(HL) ;Len
OR A
JR Z,FPTEND2
INC HL
CP (HL) ;Loop
JR C,FPTEND2
PUSH BC
INC HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (FPT3+1),DE ;Patterns PT3 or first sample PT2
LD C,A
LD B,#30-1
FPT2 PUSH DE
LD E,(HL) ;Samples
INC HL
LD D,(HL)
INC HL
EX (SP),HL
LD A,D
OR E
JR Z,$+5
SBC HL,DE
CCF
POP HL
JR C,FPTEND
DJNZ FPT2
LD E,(HL) ;#63 ;Patterns PT2 or positions PT3
INC HL
LD D,(HL) ;#64
INC HL
PUSH HL
LD HL,-#83
ADD HL,DE
SBC HL,BC
POP HL ; #65
JR NZ,FPT3
PUSH HL
ADD HL,DE
LD DE,-#65-1
ADD HL,DE
LD A,(HL)
POP HL
INC A
JR Z,FPT5 ;It PT2
FPT3 LD DE,0
PUSH HL
LD HL,-#C9
ADD HL,DE
SBC HL,BC
POP HL
JR NZ,FPTEND
PUSH HL
ADD HL,DE
LD DE,-#C9-1
ADD HL,DE
LD A,(HL)
POP HL
INC A
JR Z,FPT4 ;It PT3
FPTEND POP BC
FPTEND2 POP HL
FPTEND3 INC HL
DEC BC
JR FINDPT
FPT4 LD DE,#65-#C9 ;found PT3
ADD HL,DE
INC A
FPT5 POP DE,DE
LD DE,-#65 ;found PT2
ADD HL,DE
RET

Spectre
25.02.2005, 23:34
Не, плеер я готов написать, а вот детектор - это пусть внешняя программа занимается, все равно она после загрузки файла анализирует его и решает, вызывать или не вызывать. Задача детекта неоднозначна, я за такое не возьмусь ;)

ок, детектор беру на себя. ;) Пускай тогда инициализация вызывается так:

LD A,Тип модуля ;0 - PT2, любое другое - PT3
CALL START


Не факт, но если надо именно так, то сделать можно.

Очень хорошо если будет.


Длину мелодии брать из формата (тут плеер не причем), а в +11 можно сделать просто счетчик позиций, хотя это тоже лишне. Я хочу написать плеер, а детект, визуализация и прочее - это уже каждый по своему все равно будет делать. Тебе достаточно счетчика позиций, кому-то нужно отслеживать сэмплы, кто-то хочет сделать счетчик строк - можно множество подобных идей реализовать. Мне хочется заниматься только проигрыванием..

ok, учел это в детекторе - он сам считает длину мелодии в позициях. Осталось только счетчик позиции от плэйера получать.

Bulba
26.02.2005, 11:27
ок, детектор беру на себя. ;) Пускай тогда инициализация вызывается так:LD A,Тип модуля ;0 - PT2, любое другое - PT3
CALL START

Я тут подумал, у нас же в переменной FLAGS 6 битов неиспользуется. Может все таки их задействовать?

LD A,LOOP_BIT or PT_BIT
LD (START+10),A
CALL START

?

В данный момент, закончил с плеером PT2. Убрал напрочь конвертер PT2PF в обычный PT2 - на плеер это не влияет, а вот INIT заметно упростился. Но PT2PF по-прежнему поддерживаются (применил "хитрый" трюк :)) Плюс внедрил твои замечания. Качать отсюда: http://bulba.at.kz/UniPT2Player.7z Размер менее 1 кб!

Плюс один человек с MSX (Dioniso) попросил сделать PT2Time - подсчет длины PT2 модулей в прерываниях. Он занимает 260 байт. Качать отсюда: http://bulba.at.kz/PT2Time.7z

Завтра начинаю объединять PT2 и PT3 плееры!

... Ay_Emul: Silent now...

Bulba
26.02.2005, 11:35
Да, в исходнике PT2 плеера закомментирован более быстрый вариант выборки значения тона для ноты, но он не компилируется в ZX ASM от AIG, к сожалению...

... Ay_Emul: Jess/Atari ST (remix by S.Bulba) - Tears on my keyboard

Bulba
26.02.2005, 18:22
2Spectre: Здесь нет ошибки?


FINDPT LD A,B
OR A
RET Z; Not found

Надо проверить пустые модули PT2 и PT3, вдруг они меньше 256 байт ;)

... Ay_Emul: >+<DISSONATOR>+<16.01.00.03.10AM - *-TRAGIKOMEDY-*/HARD-TECHNO-GOA

Spectre
26.02.2005, 19:36
Я тут подумал, у нас же в переменной FLAGS 6 битов неиспользуется. Может все таки их задействовать?

LD A,LOOP_BIT or PT_BIT
LD (START+10),A
CALL START

?

Можно, например 1-ый бит под это отвести.


В данный момент, закончил с плеером PT2. Убрал напрочь конвертер PT2PF в обычный PT2 - на плеер это не влияет, а вот INIT заметно упростился. Но PT2PF по-прежнему поддерживаются (применил "хитрый" трюк :)) Плюс внедрил твои замечания. Качать отсюда: http://bulba.at.kz/UniPT2Player.7z Размер менее 1 кб!

Плюс один человек с MSX (Dioniso) попросил сделать PT2Time - подсчет длины PT2 модулей в прерываниях. Он занимает 260 байт. Качать отсюда: http://bulba.at.kz/PT2Time.7z

Завтра начинаю объединять PT2 и PT3 плееры!

С нетерпением жду объединенного плэйера. Как появится попробую его оптимизировать.


2Spectre: Здесь нет ошибки?


FINDPT LD A,B
OR A
RET Z; Not found


Конечно есть, эта та самая опечатка (плюс один переход не туда) из-за которой я тебе присылал детектор еще раз. Как я умудрился сюда запостить именно неверную версию, не понимаю. :confused:

Bulba
27.02.2005, 06:56
Конечно есть, эта та самая опечатка (плюс один переход не туда) из-за которой я тебе присылал детектор еще раз. Как я умудрился сюда запостить именно неверную версию, не понимаю. :confused:

;) Зато попутно выяснили, что я так и не изучил внимательно исходники, которые ты прислал ;) Да, чтобы вникнуть в чужой исходник, нужно время, откладывать на потом можно до бесконечности... Ничего, прорвемся :)

... Ay_Emul: Silent now...

Bulba
27.02.2005, 14:17
2Spectre:

Только что закончил объединение PT2 и PT3 плееров. И все-таки уложился в два килобайта! Осталось глюки в PT2 части выловить и можно релизить - оптимизацией можно и потом заниматься.

В PT3 и в PT2, кстати, по разному завершается портаменто: в PT2 частота доходит до заданной и не переходит её. А в PT3 частота сперва переходит заданную, а потом уже идет остановка портаменто. В обоих случаях потом происходит корректировка конечной частоты (вариант, когда конечная частота совпадает с текущей, не рассматривается, так как в этом случае оба плеера работают одинаково). В PT3 явная ошибка. Вот думаю, все-таки оставить один из вариантов для компактности. Что кто посоветует? На первый взгляд, PT3 более популярен и надо именно PT3-шный вариант оставлять...

... Ay_Emul: INTUJAO by fatal snipe#fenomen

Spectre
27.02.2005, 19:12
2Spectre:

Только что закончил объединение PT2 и PT3 плееров. И все-таки уложился в два килобайта! Осталось глюки в PT2 части выловить и можно релизить - оптимизацией можно и потом заниматься.

Это я накаркал, что влезет в 2 Кб. :) Как и предполагалось, получился бесплатный довесок к PT3 плэйеру. Зато теперь все остальные PT3 плэйеры (коих много) конкурировать с твоим не в состоянии (и раньше то с трудом :) ).


В PT3 и в PT2, кстати, по разному завершается портаменто: в PT2 частота доходит до заданной и не переходит её. А в PT3 частота сперва переходит заданную, а потом уже идет остановка портаменто. В обоих случаях потом происходит корректировка конечной частоты (вариант, когда конечная частота совпадает с текущей, не рассматривается, так как в этом случае оба плеера работают одинаково). В PT3 явная ошибка. Вот думаю, все-таки оставить один из вариантов для компактности. Что кто посоветует? На первый взгляд, PT3 более популярен и надо именно PT3-шный вариант оставлять...

PT3 вариант. Вероятность что плэйером будут слушать мелодии от PT3 в несколько раз больше, а значит отличие в звучании (если оно проявится) гораздо меньше шансов услышать.

Bulba
28.02.2005, 05:21
Это я накаркал, что влезет в 2 Кб. :) Как и предполагалось, получился бесплатный довесок к PT3 плэйеру. Зато теперь все остальные PT3 плэйеры (коих много) конкурировать с твоим не в состоянии (и раньше то с трудом :) ).

:) Да, проигрывает только по скорости. Но тут, если созрею, можно и скоростную версию сделать - есть одна глупая идея, возможно получится быстрее стандартного плеера.


PT3 вариант. Вероятность что плэйером будут слушать мелодии от PT3 в несколько раз больше, а значит отличие в звучании (если оно проявится) гораздо меньше шансов услышать.

Вчера изучал это место в разных плеерах, все-таки видимо разницы нет (уже голова не варит, блин)... Во всяком случае, PSG и от PT2, и от PT3 этим плеером пока получаются правильные.

... Ay_Emul: Silent now...

Bulba
05.03.2005, 19:33
2Spectre: На выходных нет доступа к почтовому ящику, поэтому пишу здесь. Нашел в PTxPlay ошибку - если модуль не по "круглому" адресу, то CurPos считается неправильно (после праздников вышлю fix).

2All Плеер PT2 и PT3 практически готов. С отключенными "наворотами" занимет всего #7E4 байт. Из "наворотов" ячейка с номером текущей позиции и выбор раскладки каналов: ABC, ACB или BAC (можно менять на ходу).

... Ay_Emul: Silent now...

Spectre
05.03.2005, 20:44
2Spectre: На выходных нет доступа к почтовому ящику, поэтому пишу здесь. Нашел в PTxPlay ошибку - если модуль не по "круглому" адресу, то CurPos считается неправильно (после праздников вышлю fix).
Я тебе письмо отправил со свежей бетой квика, в которой последние версии плэйера и детектора. Нашел я в детекторе аналогичную ошибку ;) : если адрес мелодии не круглый, неверно высчитывается длина и мелодия не находится. Все пофиксил, добавил комментариев, вот исправленный вариант детектора (130 байт):



FINDPT LD A,B
OR C
RET Z
LD A,(IX+0) ;Temp
OR A
JR Z,FPTEND2
CP #40
JR NC,FPTEND2
LD A,(IX+1) ;Len
OR A
JR Z,FPTEND2
CP (IX+2) ;Loop
JR C,FPTEND2
EXX
PUSH IX
POP HL
LD DE,-#64
ADD HL,DE
LD C,(IX+3) ;patterns if PT3, 0 if PT2,
LD B,(IX+4) ;displace if PT2.4Ph
ADD HL,BC
DEC HL
LD A,(HL)
INC A
JR NZ,FPT2
LD L,(IX+69) ;ornaments
LD H,(IX+70) ;
ADD HL,DE ;ornaments-#64
EX DE,HL ;HL->DE
LD HL,-201-1
ADD HL,BC
;PT3: A=0
JR FPT3
FPT2 PUSH IX
POP HL
LD E,(IX+99) ;patterns
LD D,(IX+100) ;
ADD HL,DE
DEC HL
LD A,(HL)
INC A
JR NZ,FPTEND
INC A; PT2: A=1
LD L,(IX+67) ;ornaments
LD H,(IX+68) ;
SBC HL,BC ;for PT2.4Ph
PUSH HL
LD HL,-131-1
ADD HL,DE
POP DE
FPT3 LD C,A
LD A,(IX+1) ;Len
SUB L
JR NZ,FPTEND
PUSH IX
POP HL
ADD HL,DE
LD A,C
CP (HL)
JR NZ,FPTEND
INC HL
XOR (HL) ;may be 0 or 1
DEC A
JR NZ,FPTEND
INC HL
OR (HL)
JR Z,FOUNDPT
FPTEND EXX
FPTEND2 INC IX
DEC BC
JR FINDPT
FOUNDPT OR C
LD B,A
LD C,(IX+1) ;Len
RET NZ ;PT2
LD DE,-#64
ADD IX,DE
RET



2All Плеер PT2 и PT3 практически готов. С отключенными "наворотами" занимет всего #7E4 байт. Из "наворотов" ячейка с номером текущей позиции и выбор раскладки каналов: ABC, ACB или BAC (можно менять на ходу).

ok, жду. Я тебе еще хотел предложить побольше упор на условную компиляцию IF:ENDIF сделать. Так можно сделать универсальную версию которая будет почти без переделок аласмом/засмом компилиться. Я вполне мог бы этим заняться, чтобы тебя не отрывать.

Bulba
06.03.2005, 05:56
Я тебе письмо отправил со свежей бетой квика, в которой последние версии плэйера и детектора.

А я получил (readonly доступ к почте из дома есть). Уже протестировал на нескольких десятках PT3 и PT2 - работает отлично!


Я тебе еще хотел предложить побольше упор на условную компиляцию IF:ENDIF сделать.

Да, я уже так и делаю. Например, раскладка каналов условной компиляцией отключается (а это больше сто байт). Еще думаю отслеживание loop на условное ассемблирование повесить - тоже не всем нужно.


Так можно сделать универсальную версию которая будет почти без переделок аласмом/засмом компилиться. Я вполне мог бы этим заняться, чтобы тебя не отрывать.

Я уже к этом почти пришел. SjASM позволяет более интересный синтаксис и конструкции делать, но я сознательно отказываюсь, чтобы под ZXASM3.10 и ALASM меньше работы было. Обычно я этим занимаюмь в день перед релизом. Вот только XAS меня достал. Правда конвертер ASCII2XAS от SMT я еще не попробовал...

... Ay_Emul: Silent now...

Bulba
17.03.2005, 17:01
После долгих недель отладки и оптимизации проект PTxPlay наконец завершен. Минимальный build размером всего #7BE байт, и без каких либо ошибок и ограничений играет PT2 и PT3 модули. Условным ассемблированием можно включить:

1) процедура ROUT для ZX или MSX;
2) счетчик позиций по адресу (START+11);
3) возможность менять раскладку каналов на "лету";
4) отслеживание перехода на цикл;
5) запрет официального идентификатора.

http://bulba.at.kz/PTxTools.7z

Кроме указанного плеера, пакет содержит уже знакомые отдельные универсальные плееры PT2 и PT3, процедуры детекта и поиска (thanks to Андрей Богданович), процедуры посчета продолжительности модулей с точностью до прерывания.

... Ay_Emul: Silent now...

Pawel
21.03.2005, 00:04
После долгих недель отладки и оптимизации проект PTxPlay наконец завершен.
Big thanks! Классная штука! Два плеера в одном флаконе и на сектор меньше чем оптимизированный Alco плеер PT3! Сегодня начал его вставлять в модуль PT3Play для RC и в процессе тестирования, на валяющихся на рабочем диске музах, обнаружил небольшое искажение в начале проигрывания музыки mboom (прилагается к письму). Глюк или это стандартный PT3 его неправильно играет?

Pawel
21.03.2005, 21:20
Кстати плеер в QC 3.10 тоже по своему играет начало mboom.m (отличается и от PTxPlay и от стандартного). Сегодня нашёл ещё одну музачку на которой глючит и плеер из QC 3.10 и новый PTxPlay - doom_int(из intro к Doom demo, когда-то была сконверчена из PT2), глюк явно прослушивается примерно на 15 секунде. PT3 также играет с небольшим глухим глюком, который можно и не заметить если не послушать оригинал, возможно это глюк конвертора. В общем прилагаю к этому сообщению вышеупомянутую музу и бету модуля PT3Play.RCM, может кто ещё из музыкантов потестит новый плеер на правильность воспроизведения.

Bulba
22.03.2005, 03:54
В общем прилагаю к этому сообщению вышеупомянутую музу и бету модуля PT3Play.RCM, может кто ещё из музыкантов потестит новый плеер на правильность воспроизведения.

Напишите мне по e-mail. В плеере ошибок вроде нет, хотя отличия в звучании при определенных условиях могут быть (см. комменты в исходнике).

... Ay_Emul: Silent now...

Doctor Max
22.03.2005, 05:58
Привет! Решил я доделать GT1.2. Там и оставалось всего внешний плеер написать. В общем, не получилось у меня ни фига :( Канал А нормально играет, а с B и C происходит непонятно что! Может оно нафиг никому не надо?

Bulba
22.03.2005, 12:14
Привет! Решил я доделать GT1.2. Там и оставалось всего внешний плеер написать. В общем, не получилось у меня ни фига :( Канал А нормально играет, а с B и C происходит непонятно что! Может оно нафиг никому не надо?

В GT версии 1.0-1.1 вроде бы есть ошибка в плеере. Насколько я понял, в редакторе с огибающими нельзя совмещать орнамент, а в плеерах при установке огибающей орнамент не отключаются.

---VTII sources trfuncs.pas---
...
//вероятно, в GTR 1.x это ошибка, поскольку судя по всему с
//огибающими должен быть нулевой орнамент
...
---VTII sources trfuncs.pas---

Если что, пиши в мыло, я здесь скорей всего уже не появлюсь...

... Ay_Emul: Silent now...

Bulba
22.03.2005, 12:53
Кстати плеер в QC 3.10 тоже по своему играет начало mboom.m (отличается и от PTxPlay и от стандартного).

Проверил оба модуля - отличий нет. В mboom вообще никаких проблем нет, а doom_int - посмотри на орнамент #6, там мусор какой-то. Но играется правильно (хоть и неблагозвучно). RCM протестировал, вроде работает, только его можно сбить с толку, изменив расширение файла.

А как ты проверял, что модули звучат не так? Я ушам не доверяю, только сравнением реального вывода.

vorobey()mail.khstu.ru <- если будут пожелания или вопросы по проекту, пиши на этот адрес.

... Ay_Emul: Silent now...

Bulba
22.03.2005, 14:37
PT3Playb.RCM с определнного момента начинает неправильно играть следующие модули:

Tr_Songs\Authors\zHenYa\98-2.pt2
Tr_Songs\Authors\Sergey Bulba\VT\Kroshka.pt3

А QC играет правильно. Видимо плеер ассемблирован неправильно или в памяти чем-то портится. Сами модули в памяти не битые, если не считать что в конце строк с названием и автором появились нули (для PT3 это не страшно, а вот PT2 портится безвозвратно, даже зацикливание уже не сработает). Лучше модули в памяти не портить, а то RC использовать для рипания музыки через SNA будет невозможно. Использовался RC2.1r.

Shiny
03.12.2017, 08:28
Подскажите, пожалуйста, в чем проблема - трек играет криво.

jerri
03.12.2017, 16:15
Шынни, вначале? первый паттерн?

Shiny
03.12.2017, 17:02
Шынни, вначале? первый паттерн?

Да. похоже TS. Нет ни у кого путного сырка плеера?