ZXNet эхоконференция «music.zx»


тема: Исправление плеера PT 3.51



от: Ivan Roshin
кому: Alexey
дата: 13 Apr 2001
Hello, Alexey! 30 Mar 2001 you wrote: AL> Hедавно читал хелп к BV 2.10 и там говорилось о глюке в AL> сабже у PT 3.51, так вот, я не совсем понял в чём он AL> заключается? Hе мог бы ты его пофиксить? Как известно, для использования музыки, написанной в PT 3.51, в своей программе, ее надо откомпилировать с плеером. Так вот, плеер будет неправильно проигрывать музыку, если в ней использованы команды 9 и A (изменение частоты огибающей), в том случае, если такая команда стоит на ноте, использующей огибающую (если команда стоит не на ноте, а сама по себе - все будет нормально). Неправильность проигрывания в том, что частота огибающей не будет изменяться, как если бы такой команды и вовсе не было. А чтобы все же правильно проигрывать модули с командами 9 и A, надо исправить ошибку в плеере. В описании BV 2.10 я приводил способ исправления (обнуление байта по смещению #4C1 от начала плеера), но он был не совсем точен. Команды 9 и A после этого начинали работать, но - не заканчивали изменять частоту, когда встречалась следующая нота, использующая огибающую. Так что все равно некоторые модули звучали неправильно. Итак, как же произвести окончательное исправление? В исходном тексте плеера (он входит в комплект поставки PT 3.51) имеется такой фрагмент: ;--- install_E --- E_ins0 JR Ei_form Esl_ids LD HL,0 ;stp_sld_env LD (Esl_sds+1),HL Esl_ist LD A,0 ;stp_sld_p LD (Esl_stp+1),A <──────────────────────────── (1) LD (Esl_sts+1),A LD A,#18 LD (E_ins0),A Ei_form LD A,0 ;env_form LD (E_form+1),A AND A JR Z,temp Ei_frq LD HL,0 ;env_frq LD (E_frq+1),HL XOR A LD L,A LD H,A LD (Ei_form+1),A LD (Esl_stp+1),A <──────────────────────────── (2) LD (Esl_frq+1),HL Что мы видим? (1) - в переменную по адресу Esl_stp+1 помещается один из параметров команды 9 или A. Далее, если эта команда стояла на ноте, использующей огибающую (т.е. Ei_form+1 не 0), то выполняется фрагмент программы, содержащий (2) - обнуление переменной Esl_stp+1. Параметр команды обнуляется - и в результате изменения частоты огибающей не будет. Для окончательного исправления фрагмент плеера надо переделать так: ;--- install_E --- E_ins0 JR Ei_form Esl_ids LD HL,0 ;stp_sld_env LD (Esl_sds+1),HL Esl_ist LD A,0 ;stp_sld_p LD (Esl_stp+1),A LD (Esl_sts+1),A LD A,(Ei_form+1) AND A JR Z,BUG_F3 LD A,#3E LD (BUG_F2),A BUG_F3 LD A,#18 LD (E_ins0),A Ei_form LD A,0 ;env_form LD (E_form+1),A AND A JR Z,temp Ei_frq LD HL,0 ;env_frq LD (E_frq+1),HL XOR A LD L,A LD H,A LD (Esl_frq+1),HL LD (Ei_form+1),A BUG_F2 JR BUG_F1 LD A,#18 LD (BUG_F2),A JR temp BUG_F1 LD (Esl_stp+1),A Длина плеера при этом немного увеличится. С уважением, Иван Рощин.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Видео - Боевик "Боеголовка".
Бывальщина - Фелиста.
Party - Paradox'2002 rules.
Введение - Прoшлo нe тaк уж мнoгo врeмeни co дня oбъявлeния oб oбъeдинeнии 2x элeктрoнныx издaний, и мы прeдcтaвляeм Вaшeму внимaнию пeрвый нoмeр нoвoй гaзeты пoд нaзвaниeм Sinc Re-Stared...
Очумелые ручки - Kемpsтоn моusе на BB55 с разводкой печатной платы.

В этот день...   8 мая