Soundanalyzer

Scene+ #12

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...

Поделитесь вашим мнением о статье