Born Dead #01
24 октября 1998
  Звук  
  AY/YM  

Новое в мире звуков - O проблемах качественного цифрового звука на AY.

════════════════════════════════════════════════════════════════
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ НОВОЕ В МИРЕ ЗВУКОВ AY ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
════════════════════════════════════════════════════════════════

   В этом разделе, мы предлагаем ознакомиться читателям, интере-
сующимся  проблемами качественного цифрового звука на обыкновен-
ном  сопроцессоре, с работой известного московского спектрумиста
Дмитрия  Григорьева  aka  Oldman. Чуть ниже вы сможете прочитать
авторитетные  комментарии  признаных  знатоков в области DIGITAL
SOUND ON AY - MONSTЕR'а и UnBEL!EVER'а. Дадим слово автору:

----------------------------------------------------------------

(c) Oldman

Итак, довольно продолжительный треп под сабжем "8бит->4бит" зас-
тавил меня взяться за паяльник... тьфу... залезть в MASM в поис-
ках  практических доказательств собственных утверждений. Доказа-
тельств  я,  собственно,  не  нашел,  но  в  результате родилась
original  idea  ;) Но начнем сначала... Утверждение, что многок-
ратная  посылка в порт AY одного и того же значения улучшает ка-
чество  воспроизведения  - бред! Я это повторяю уже в третий раз
и,  если  кто-нибудь еще меня в этой ошибке упрекнет... укушу :)
Что  касается таблиц и формул... Единственно верная (или вся до-
кументация к AY врет) формула преобразования:

       LET AY=(LN (V+1)/LN 2)*2-1: IF AY<0 THEN LET AY=0

где  AY  - значение для AY в диапазоне 0-15, а V - линейный уро-
вень громкости (0-255)

    Но! Правильная формула не гарантирует наилучшего воспроизве-
дения! Собственно, приличное качество на четырех битах можно по-
лучить  только  пробуя  разные формулы, искусственно ограничивая
динамический диапазон оригинальной оцифровки и даже просто выку-
сывая  отдельные  импульсы,  вносящие  наибольшее  искажение. То
есть,  не помешал бы приличный редактор сэмплов на Спектруме, но
сейчас  не  об этом ;) Метод, предложенный Денисом Сотченко (вы-
числение  двух значений, среднеарифметическая сумма которых наи-
более  близка  к  правильной и поочередное выкидывание их в порт
AY)  не дал значительного улучшения качества проигрываниия и фо-
нировал  ТАКИМ свистом, что... Впрочем, вероятно я попросту неб-
режно  его реализовал (значения сменялись с частотой 22kHz и вы-
числялись  весьма приблизительно)... В любом случае, не в харак-
тере  русского  кодера развивать чужую разработку, когда имеется
собственная ;-) Итак, представляю:

               UltraSound4x3 method for AY chips
                        (c) OLDMAN 1998
               ---------------------------------

Идея  проста как конструкция веника - у AY ТРИ канала по 4 бита,
следовательно,  комбинируя громкости всех трех каналов легко до-
биться больше, чем 16-ти уникальных, а главное, очень близко со-
ответствующих 8 битной шкале 0-255, уровней громкости! Собствен-
но, у меня получалось вычислить от 160 до 206 уровней (но в пос-
леднем  случае  несколько  возрастало  соотношение  сигнал/шум).
Кстати  о шуме... Шумит здорово ;) Но искажений, хрипов и визгов
на слух совершенно не заметно, а это, согласитесь, прогресс! От-
куда  шум  - понятно. Каналы обрабатываются не одновременно - их
еще  нужно переключать. Очевидно, шум можно уменьшить, минимизи-
ровав  время  между записями в порты. Но, тому, кто сможет уско-
рить  нижеприведенный  кусок кода, надо будет памятник поставить
при жизни ;)

              LD      BC,#FFFD
              EXX
              LD      BC,#BFFD

              EXX                     ; 4
              OUT     (C),L           ; 12
              EXX                     ; 4
              OUT     (C),D           ; 12
              EXX                     ; 4
              OUT     (C),H           ; 12
              EXX                     ; 4
              OUT     (C),E           ; 12
              EXX                     ; 4
              OUT     (C),D           ; 12
              EXX                     ; 4
              OUT     (C),L           ; 12    96

Ну, вкратце я объяснил, а дальше те, кому это нужно, сами разбе-
рутся.  В крайнем случае, у меня всегда можно спросить (недели 2
я еще буду помнить все подробности :) На всякий случай, если ко-
му-то  методика пригодится и он пожелает использовать ее в своих
работах, упомяну: методика, куски кодов, исходники и рассчитыва-
ющие  программы  - абсолютно фриварны! Делайте все, что заблаго-
рассудится,  но,  если не влом, упомяните название метода (можно
кратко  U43) и его автора в копирайтах, бегущих строчках или где
у вас там документация к вашей программе. И не забудьте меня из-
вестить  - потешьте старика ;) Ну, самые наглые, хоть привет мне
передайте ;)

----------------------------------------------------------------
(Мы  пропускаем подробное описание содержания архива распростра-
няемых  OLDMAN'ом программ в поддержку метода ULTRAS4X3. Отметим
лишь то, что в комплект входят два плеера (11 и 22кHZ) исходники
плееров, небольшая демка с цифрованной речью и программы генери-
рующие таблицы. (см.ниже)
----------------------------------------------------------------

tabcalc.<B> - Страшная   программа!!!  Вычисляет   три  значения
              для  трех  портов  AY, сумма которых соответствует
              диапазону  0-255 и записывает их в три таблицы. По
              дороге  выводит  график,  где по X - 0-255, по Y -
              сумма громкостей трех каналов. При запуске требует
              ввести  коэффициент.  Как  бы  проще  объяснить...
              k=256/3  - это мы как бы поровну делим шкалу 0-255
              на   три   канала   и   получаем   160  уникальных
              "громкостей".  k=128  -  это  мы немного уменьшили
              коэффициент,  получили  206 "громкостей", но общий
              уровень  звука  упал  на  треть  (а  шума  - нет).
              Написана   прога   на   100%   Бейсике,  оперирует
              массивами   точных  чисел  размерностью  до  1024,
              поэтому  работает  очень  медленно. P120, эмулятор
              Шалаева  на  максимальной скорости - полтора часа.
              На   реальном   Спектруме   советую  запускать  на
              выходные ;)

Вот,  собственно, и все, что удалось проработать за почти месяц.
Надеюсь, из этого выйдет что-то путное...

Best regards, Dmitry (Oldman)
InterNet: oldman@i-connect.ru
FidoNet: 2:5020/689.31
ZXNet: 095/100.1

----------------------------------------------------------------

MMA>  После первого прослушивания демонстрационной программы ме-
тод  оставляет  приятные  впечатления. Есть определенный шум, но
трехмерность  звука  поражает.  Однако  прослушивание  реального
сампла  с  помощью прилагаемых плееров выявило обратное. Этот же
сампл,  будучи  сконвертированным  старыми дедовскими способами,
играет как 4bit и гораздо чище. К тому же даже при прослушивании
прилагаемой  демо-программы  на  качественной  технике  (дома  у
MMCM'а)  где хорошо слышны низкие частоты, доминирует шум, а сам
звук  оказываеться  где то "на фоне"... Да и хранить 8bit вместо
4bit  это  расточительно в смысле памяти и обьема проигрываемого
звука. Одним словом однозначно охарактеризовать метод сложно,
надеюсь MONSTER сможет расставить точки над i...

MONSTER>  Метод прикольный конечно, но глючный.  Слишком высокий
уровень шума портит все впечатление.  Кстати, мне удалось сокра-
тить наиболее критичный по времени кусок кода  с  96  до  77 (!)
тактов, что собственно  не  повысило  качество воспроизведения ! 
  (по некоторым причинам, которые собственно и не учел Oldman)
             Подробности  -  в  следующем номере...

----------------------------------------------------------------
                     Авторы этого номера:
----------------------------------------------------------------
                      ___
MONSTER              /  /  SAGE GROUP - all codes, some text
MMCM        ___     /  /  SAGE GROUP - music, logo
MARKET SOFT \  \   /  /  SAGE GROUP - intro gfx, correction
UnBEL!EVER   \  \ /  /  EXTREME - all texts, main idea
              \  \  /
               \__\/ rulez forever

----------------------------------------------------------------
                     Контактные адреса:
----------------------------------------------------------------

443074 САМАPА а/я 9966 Мучкаеву Максиму Алексеевичу (UnBEL!EVER)
(8462) 941595 Сергей (MMCM)
speed_co@yahoo.com

----------------------------------------------------------------



Другие статьи номера:

Легенды оживают - О выходе журналов ZX-Power #3 и Oberon #5.

Новое в мире звуков - O проблемах качественного цифрового звука на AY.

От авторов - О выходе первого номера Самарской газеты.


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

Похожие статьи:
Interviews - Интервью с Jordan/Exodus, автором великолепных демок "Dies Irae", "Real Action".
Защита - Проблемы защиты и взлома программ.
Рассказ - Ну, юзер, погоди! (продолжение).

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