Важная информация

User Tag List

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 54

Тема: Работа с трекерными модулями на ZX

  1. #31
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Благодарностей: 11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В поддержку нового проекта от 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; 27.02.2005 в 20:47.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Благодарностей: 11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bulba
    Не, плеер я готов написать, а вот детектор - это пусть внешняя программа занимается, все равно она после загрузки файла анализирует его и решает, вызывать или не вызывать. Задача детекта неоднозначна, я за такое не возьмусь
    ок, детектор беру на себя. Пускай тогда инициализация вызывается так:

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

    Цитата Сообщение от Bulba
    Не факт, но если надо именно так, то сделать можно.
    Очень хорошо если будет.

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

  4. #33
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectre
    ок, детектор беру на себя. Пускай тогда инициализация вызывается так: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...

  5. #34
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  6. #35
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    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

  7. #36
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Благодарностей: 11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    Цитата Сообщение от Bulba
    В данный момент, закончил с плеером 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 плееры!
    С нетерпением жду объединенного плэйера. Как появится попробую его оптимизировать.

    Цитата Сообщение от Bulba
    2Spectre: Здесь нет ошибки?

    Код:
    FINDPT		LD A,B
    		OR A
    		RET Z; Not found
    Конечно есть, эта та самая опечатка (плюс один переход не туда) из-за которой я тебе присылал детектор еще раз. Как я умудрился сюда запостить именно неверную версию, не понимаю.

  8. #37
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectre
    Конечно есть, эта та самая опечатка (плюс один переход не туда) из-за которой я тебе присылал детектор еще раз. Как я умудрился сюда запостить именно неверную версию, не понимаю.
    Зато попутно выяснили, что я так и не изучил внимательно исходники, которые ты прислал Да, чтобы вникнуть в чужой исходник, нужно время, откладывать на потом можно до бесконечности... Ничего, прорвемся

    ... Ay_Emul: Silent now...

  9. #38
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    2Spectre:

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

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

    ... Ay_Emul: INTUJAO by fatal snipe#fenomen

  10. #39
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Благодарностей: 11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bulba
    2Spectre:

    Только что закончил объединение PT2 и PT3 плееров. И все-таки уложился в два килобайта! Осталось глюки в PT2 части выловить и можно релизить - оптимизацией можно и потом заниматься.
    Это я накаркал, что влезет в 2 Кб. Как и предполагалось, получился бесплатный довесок к PT3 плэйеру. Зато теперь все остальные PT3 плэйеры (коих много) конкурировать с твоим не в состоянии (и раньше то с трудом ).

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

  11. #40
    Activist
    Регистрация
    19.01.2005
    Сообщений
    291
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectre
    Это я накаркал, что влезет в 2 Кб. Как и предполагалось, получился бесплатный довесок к PT3 плэйеру. Зато теперь все остальные PT3 плэйеры (коих много) конкурировать с твоим не в состоянии (и раньше то с трудом ).
    Да, проигрывает только по скорости. Но тут, если созрею, можно и скоростную версию сделать - есть одна глупая идея, возможно получится быстрее стандартного плеера.

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

    ... Ay_Emul: Silent now...

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Работа с STS5.7
    от DemiChron в разделе Программирование
    Ответов: 3
    Последнее: 24.07.2005, 19:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •