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

Длина плеера при этом немного увеличится.

С уважением, Иван Рощин.




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

Похожие статьи:
Эпилог - авторы газеты.
Юмор - Штирлиц. Продолжение.
Это интересно - Обзор прессы.
speccy gfx scene today - обзор спектрумовской графики нарисованной за 2008 год.
Четыре килобайта - Первая львовская электронная газета.

В этот день...   21 декабря