SOUNDANALYZER
Очень часто в демо можно увидеть так называемые VU-метры — весьма симпатичная штука, если знать, как их запрограммировать. Vision of TMG опубликовал простой анализатор в виде листинга для набора в COMPUTER FLOHMARKT — очень простую программку размером 35 байт, и в ней была небольшая ошибка, которая для других, впрочем, оказалась преимуществом. Дело в том, что она считывала значения напрямую из AY-чипа и использовала их для отображения полос VU-метра. Это работало со всеми AY-треками, даже если использовался всего лишь оператор PLAY, а анализатор крутился на прерываниях. Пользователи 48K, у которых не было AY-чипа, остались ни с чем, но даже на моем +2A ничего не отображалось (мне это кажется странным, может быть, дело только в моем +2A?).
Однако существует и совершенно другой способ получить значения для VU-метра (во всяком случае, для Soundtracker) — даже без AY-чипа. В плеере Soundtracker, который компилятор добавляет к треку, находятся три адреса, соответствующие трем столбикам VU-метра. Если знать эти адреса и быть хотя бы средним кодером на ассемблере, не составит никакого труда написать небольшую MC-программку, которая будет считывать эти значения и эффектно их выводить.
Конечно, компилированный бейсик тоже сгодится, но я бы никому не советовал вешать такое на прерывания: основная бейсик-программа, работающая параллельно, будет ползти с черепашьей скоростью (в зависимости от сложности подпрограммы). Поэтому, несмотря на мои скромные познания в машинном коде, я предпочел написать анализатор на ассемблере. С моим ограниченным набором команд это было совсем непросто, но тем не менее я справился! Моя программа получилась длиннее, чем у Vision, и рисует столбики в непривычном направлении — то есть не слева направо, а справа налево, что немного необычно!
Кто хочет взглянуть на этот эффект — его можно увидеть в моей новой игре Indian Patience на экране выбора управления, причем тоже на прерываниях!
Итак, если вы хотите собрать свой собственный анализатор, вам нужно знать ячейки памяти VU-метра, вот они:
- Канал 1 (значения 0–15): Player+169
- Канал 2 (значения 0–15): Player+170
- Канал 3 (значения 0–15): Player+171
Если плеер расположен в памяти, например, с адреса 25000, то значения VU-метра будут находиться в ячейках 25169, 25170 и 25171. А сам адрес плеера зависит от того, какой адрес вы укажете при объединении (MERGE) плеера.
Таким образом, можно реализовать абсолютно любой анализатор: столбики, стрелочные индикаторы, как в LYRA II, или что-то еще — фантазия ничем не ограничена.
MC-листинг для отображения одного канала МОГ БЫ выглядеть так:
Start: LD DE,22561 (DEstination = атрибуты, вверху)
LD IX,(Player+169) (считать значение столбика в IX)
LD HL,bar (адрес шкалы, содержащей 16 пустых атрибутов,
например 07, и 16 заполненных)
ADD HL,BC (HL=HL+BC)
LD BC,16 (ByteCounter = 16, столько байт копируем)
LDIR (копируем из HL в DE, BC байт)
RET (возврат в программу)
Это лишь пример, показывающий сам принцип реализации. Моя программа устроена несколько сложнее, и при желании можно работать с таблицами в памяти, чтобы сделать, например, скроллирующийся VU-метр. Фантазия кодера здесь безгранична, как я уже говорил.
Помимо Indian Patience, я также выложил свой анализатор в рубрике SONSTIGES (EXTRAS), вместе с треком и описанием адресов — что где находится.
Ах да, еще предложение для программистов. Как насчет Bursttracker — саундтрекера, который, подобно Wham-Music Box 48K, расщеплял бы звуковые каналы и давал до шести каналов? Можно ведь программно расщепить каждый из трех каналов по отдельности, верно?
И на этом я прощаюсь до следующей статьи.
Tiger's Claw of...
Поделитесь вашим мнением о статье