THE COMPLETE AMIGA HARDWARE
REFERENCE MANUAL



                                ГЛАВА 5

                                 ЗВУК


ВВЕДЕНИЕ

В этой  главе  рассказано  как,  обращаясь  непосредственно  к  железу
получать звуки. Основные темы, описанные в этой главе:

* Краткий обзор методов получения компьютерного звука.

* Как получать  простые  и  устойчивые  звуки,  изменяющиеся  и  более
сложные звуки.

* Как использовать звуковые каналы для получения специальных эффектов,
объединение каналов для получения стерео звука, и использование одного
канала для модуляуии другого.

* Как получить качественный звук несмотря на ограничения системы.

Раздел в конце главы дает вам значения нот, которые можно использовать
для создания музыки по шкале отношений.

Эта глава - не обучающая программа  по  компьютерному  синтезу  звука;
полное  описание  создания  звука  на компьютере требует гораздо более
объемного документа. Цель этой главы состoит в том, чтобы указать путь
к   использованию   возможности   Амиги.   Компьютерный  синтез  звука
интересное,  но  сложное  занятие,  требующее   длительной   возни   с
параметрами, проб и ошибок.

ПРИРОДА ЗВУКА, КОМПЬЮТЕРНЫЙ ЗВУК

Звук передается к вашим барабанным  перепонкам  через  воздух  в  виде
последовательных циклов изменения давления воздуха, или звуковых волн.
Звуки  могут  представляться  графически,  что  моделирует   изменение
давления воздуха за определенное время. Слышимые атрибуты звука влияют
на форму графика. Если форма волны регулярна и постоянно  повторяестя,
полученный  звук  будет  постоянной  высоты (высокой или низкой), типа
одиночной музыкальной ноты. Каждое повторение формы  волны  называется
периодом  звука. Если волна имеет неправильную форму, у звуковой волны
будет небольшой шаг или вообше не будет шага, подобно  звуку  громкого
столкновения  или  мчащейся  воде.  Какое  влияние оказывает на высоту
звука его частота? Звуки с более высокой частотой кажутся  выше.  Люди
могут  слышать  звуки которые имеют частоту между 20 и 20,000 циклов в
секунду.  Амплитуда  волны   (самая   высокая   точка   на   графике),
воспринимается  как громкость звука. Общая форма волны определяет тон,
или  тембр.  На  рисунке  5-1  показана  волна  специфической   формы,
называемая синусоидой, которая представляет собой один период простого
тона.



                      РИСУНОК 5-1: Синусоида

В электронных устройствах записи звука и устройствах вывода,  атрибуты
звуков  представляются  амплитудой  и частотой. Частота - число циклов
волны в секунду, и общепринятая единица частоты - Герц  (Hz),  который
обозначает  1  цикл  в секунду. Большие значения, или высокие частоты,
измеряются в килогерцах (KHz) или мегагерцах (MHz).

От частоты сильно зависит воспринятие  высоты  звука.  При  увеличении
частоты,   увеличивается   и   высота  звука.  Эта  связь  описывается
показательной функцией. Увеличение частоты от 100 до 200Hz приводит  к
большому  увеличению  высоты,  но  увеличение от 1,000 до 1,100Hz едва
заметно. В музыке высота звука представляется в октавах. Тон, на  одну
октаву выше чем другой, имеет частоту вдвое больше.

Второй  параметр  который  определяет  форму  волны  -  амплитуда.   В
электронной схеме, амплитуда влияет на напряжение. Когда сигнал идет к
динамику,  амплитуда  выражается  в   ваттах.   Воспринятая   звуковая
интенсивность   измеряется   в   децибеллах  (db).  Человеческий  слух
воспринимает  диапазон  приблизительно  120db;  1db  -  самый   слабый
слышимый звук. Грубо говоря, каждые 10db соответствуют удвоению звука,
и 1db - самое маленькое изменение амплитуды, которое заметно  в  звуке
средней  громкости.  Громкость, которая является амплитудой выводимого
звукового сигнала, логарифмически зависит от децибелл.

Частота и амплитуда полностью независимы. Однако, когда звук  услышан,
имеется  взаимодействие между громкостью и высотой. Слышимая громкость
низкочастотных звуков уменьшается быстрее, чем высокочастотных звуков.

Третий атрибут звука, тембр, зависит  от  присутствия  или  отсутствия
обертонов, или гармоник. Любая волна сложной формы фактически является
смесью синусоид различных амплитуд, частот,  и  фаз  (начальная  точка
волны  по  оси времени). Эти компоненты названы гармониками. Например,
волна квадратной формы имеет бесконечное число гармоник.

Все устойчивые звуки могут быть описываны частотой, полной амплитудой,
и относительными гармоническими амплитудами. Слышимые эквиваленты этих
параметров - соответственно высота, громкость, и тембр. Измененяющийся
звук это устойчивый звук, с динамическим изменением параметров.

При получении  электронного  звука,  аналоговое  устройство,  например
магнитофон,  записывает формы звуковой волны и частоты как непрерывный
переменный  поток  изменения  давления  воздуха.  При  воспроизведении
магнитофон  посылает  волну  на  усилитель,  где  она  превращаются  в
аналоговую форму,  заключающуюся  в  изменении  напряжения.  Усилитель
посылает   это  переменное  напряжение  на  громкоговоритель,  который
переводит  их  в  колебания  давления   воздуха,   которые   слушатель
воспринимает как звук.

Компьютер не может сохранять аналоговую информацию о  форме  волны.  В
компьютере звуковая волна представляется в виде конечной строки чисел.
Это  преобразование  делается  делением  оси  времени  графика   волны
выборками  значений  графика  на  равные  интервалы, каждый из которых
должен быть достаточно мал, чтобы форма волны за время между веборками
не  могла  сильно  изменится.  Каждое  значение выборки, возникающее в
результате этого разбиения называется семплом. Эти семплы  сохраняются
в  памяти, и вы можете проиграть их с любой частотой. Компьютер подает
семплы на цифро-аналоговый преобразователь (DAC), который переводит их
в  аналоговую форму. Для получения звука аналоговые сигналы посылаются
сначала на усилитель, а затем на динамик.

Рисунок 5-2 показывает пример синусоиды, квадратной волны, треугольной
волны, вместе с таблицей семплов для каждого вида волны.

ПРИМЕЧАНИЕ

Иллюстрации не изменяют масштаб звука. В таблице столько-же  значений,
сколько  точек на рисунках. Значения амплитуды задается в интервале от
127 до -128.



               РИСУНОК 5-2: Оцифровка значений амплитуды


         ОЦИФРОВАННЫЕ ЗНАЧЕНИЯ АМПЛИТУДЫ

      ВРЕМЯ      СИНУС    КВАДРАТ   ТРЕУГОЛЬНИК

        0            0      100         0
        1           39      100        20
        2           75      100        40
        3          103      100        60
        4          121      100        80
        5          127      100       100
        6          121      100        80
        7          103      100        60
        8           75      100        40
        9           39      100        20
       10            0     -100         0
       11          -39     -100       -20
       12          -75     -100       -40
       13         -103     -100       -60
       14         -121     -100       -80
       15         -127     -100      -100
       16         -121     -100       -80
       17         -103     -100       -60
       18          -75     -100       -40
       19          -39     -100       -20

АМИЖНАЯ ЗВУКОВАЯ ПОДСИСТЕМА

Amiga имеет четыре независимых аудио канала. Вы можете программировать
каждый  канал  для  получения  сложных аудио эффектов. Также Вы можете
также объединять каналы так, чтобы один канал модулировал звук другого
или соединять два канала для получения стерео эффекта.

Каждый  аудио  канал  состоит   из   восьмибитного   цифро-аналогового
преобразователя,  управляемого каналом прямого доступа к памяти (DMA).
Аудио DMA может делать две выборки  данных  за  каждую  горизонтальную
строку  развертки.  Для получения простого, устойчивые тона, DMA может
автоматически играть одну и ту-же волну; кроме того, вы  можете  также
программировать все виды сложных звуковых эффектов.

Имеются два основных метода получения звука на Амиге -  автоматическая
генерация  звуков  (DMA)  и  прямая  генерация  звуков  (не-DMA).  При
использовании автоматической генерации  звука,  система  автоматически
производит выборку данных прямым доступом в память.

ФОРМИРОВАНИЕ И ПРОИГРЫВАНИЕ ЗВУКА

Этот раздел покажет вам как создать  простой  звук  и  проиграть  его.
Кроме  того,  в  этом  разделе определяется большое количество основых
понятий и терминов, которые используются при генерации звука на Амиге.

Чтобы получить устойчивый тон, выполните следующие операции:

1. Решите какой канал Вы будете использовать.
2. Определите форму волны и создайте таблицу семплов в памяти.
3. Установите регистры, сообщающие системе где находятся данные  и  их
длину
4. Определите громкость, с которой должен проигрываться звук.
5. Определите  период семплирования, или скорость вывода.
6. Включите аудио канал и запустите DMA.

ВЫБОР ИСПОЛЬЗУЕМОГО КАНАЛА

Amiga имеет четыре аудио канала. Каналы 0 и 3 соединены с левым стерео
каналом,  а каналы 1 и 2 - с правым. Выбирайте канал, расположенный на
той стороне, с которой должен исходить звук.

СОЗДАНИЕ АУДИОДАННЫХ

Форма волны, используемая в этом разделе в качестве примера -  простая
синусоида,  которая  производит  чистый  тон.  Для  сохранения памяти,
обычно  достаточно  задать  только  один  полный  период  волны.   Для
устойчивого,   неизменного   звука,   значения  в  начале  и  в  конце
последовательности  данных  должны  быть  близки  друг  к  другу.  Это
гарантирует,  что непрерывное этого отрезка будет звучать также, как и
непрерывный звук.

Звуковые данные организуется в набор восьмибитных элементов; каждый из
которых  является  выборкой формы волны (семплом). Каждое слово данных
состоит из двух таких семплов. Значения  семпла  могут  изменяться  от
-128 до +127.

Например,  данные,  показанные  ниже,  дают  близкое   приближение   к
синусоиде.

ПРИМЕЧАНИЕ

Данные сохраняется в памяти байт за байтом. Самый первый  оцифрованный
байт  имеет  самый  низкий  адрес, второй байт имеет следующий адрес и
т.д. Кроме того, первый байт данных должен  располагаться  по  четному
адресу, поскольку аудио DMA работает только с словами.

Чтобы использовать нулевой аудио канал,  запишите  адрес  расположения
аудио данных в регистр AUD0LC. Организация аудио данных показана ниже.
Для простоты, "AUDxLC" в таблице замещает комбинацию двух  фактических
регистров  размещения  (AUDxLCH  и AUDxLCL). Для того, чтобы аудио DMA
мог оперировать с данными, они должны располагаться в chip памяти.

             ТАБЛИЦА 5-1: Пример аудио данных для нулевого канала

 аудиоданные --->   AUD0LC *       100  98
                    AUD0LC +2 **    92  83
                    AUD0LC +4       71  56
                    AUD0LC +6       38  20
                    AUD0LC +8        0 -20
                    AUD0LC +10     -38 -56
                    AUD0LC +12     -71 -83
                    AUD0LC +14     -92 -83
                    AUD0LC +16    -100 -98
                    AUD0LC +18     -92 -83
                    AUD0LC +20     -71 -56
                    AUD0LC +22     -38 -20
                    AUD0LC +24       0  20
                    AUD0LC +26      38  56
                    AUD0LC +28      71  83
                    AUD0LC +30      92  98

ПРИМЕЧАНИЯ

* Звуковые данные располагаются по границам слов.

** AUD0LC представляет собой объединенные AUD0LCL и AUD0LCH.

УСТАНОВКА ДАННЫХ

Для того, чтобы оперировать с данными, системе  должно  быть  известен
адрес размещаения и длина данных(в словах).

Регистры размещения AUDxLCH и AUDxLCL  содержат  старшие  три  бита  и
младшие  пятнадцать  бит  адреса,  соответственно.  Так  как  эти  два
регистра расположены один за другим,  возможна  адресация  данных  как
длинного  слова по адресу AUDxLCH "X" в названиях регистров обозначает
номер аудио канала Номера могут быть 0, 1, 2, и 3.

Регистры размещения, отличаются от  регистров  указателей.  Содержимое
этих  регистров  задается только один раз. Для повторного проигрывания
звука не требуется их перезагрузка. Когда система  выбирает  последнее
слово  аудиоданных,  она  использует  содержимое  этих  регистров  для
перехода на начало данных. Установка регистров размещения производится
так:

WHERE0DATA:
        LEA CUSTOM,a0         ;Базовый адрес чипсета
        LEA AUDIODATA,a1
        MOVE.L a1,AUDOLCH(a0) ;Задаем 32-х битный адрес

Длина данных - это число семплов в вашем звуке, деленное на  2  (число
слов).  При  использовании аудиоданных, приведенных выше, длина данных
составит 16 слов. Это число записывается в регистр длины  аудиоданных,
называющийся  AUDxLEN,  где  "x" обозначает номер канала. Этот регистр
устанавливается так, как показано ниже.

SETAUDOLENGTH:
        LEA CUSTOM,a0             ;Базовый адрес чипсета
        MOVE.W #16,AUD0LEN(a0)    ;Задаем длину аудиоданных

УСТАНОВКА ГРОМКОСТИ

Для каждого канала можно установить  громкость  проигрывания  звука  с
помощью  6-ти  битного  регистра громкости, называющегося AUDxVOL, где
"x" обозначает номер  аудиоканала.  Вы  можете  задавать  громкость  в
пределах  от  64  до 0. Однако, фактическая громкость слышимого звука,
зависит  от  амплитуды  проигрываемого  семпла.  Значения   громкости,
задаваемые  в  регистрах  громкости  соответствуют уровням громкости в
децибеллах.  В  таблице,  расположенной   в   конце   главы   показано
соответствие  значения уровня громкости в децибеллах для каждого из 65
уровней задаваемой громкости.

При стандартном выводе звука с громкостью 64,  используя  максимальные
значения данных от -128 до 127, напряжение на выходе получается от +.4
вольта до -.4 вольта.

                        TABLE 5-2: Уровни громкости

              ГРОМКОСТЬ  ДЕЦИБЕЛЫ   УРОВЕНЬ

                 64         0       (максимальная громкость)
                 48       -2.5
                 32       -6.0
                 16       -12.0    (на 12db ниже от макс. уровня)

Для задания любого значения от 0 до 64 запишите это  значение  в  биты
5-0 регистра AUD0VOL. Например:

SETAUDOVOLUME:
         LEA CUSTOM,a0
         MOVE.W #48,AUD0VOL(a0)

Децибеллы показываются как отрицательные значения, начиная от 0 потому
что  это удобный способ работы с устройствами звукозаписи, такими, как
магнитофон. Обычно оптимальный  уровень  записи  обозначается  как  0,
громкость, меньшая максимильной, указывается со знаком минус.

УСТАНОВКА СКОРОСТИ ВЫВОДА ДАННЫХ

Высота получаемого звука зависит от частоты. Для того, чтобы  сообщить
системе,  с  какой  частотой  проигрывать  звук,  вы должны определить
периодичность   осуществления    выборки    (семплирования).    Период
семплирования  определяет число системных тактов между между выборками
каждого байта данных. Для  каждого  канала  имеется  регистр  периода,
используемый  как обратный счетчик. При его обнулении происходит вывод
следующего байта аудиоданных. Единицей периода является  единицы  тика
системных  часов. Минимальное значение периода - 124 тика на NTSC (123
на PAL), а максимальное - 65535. Эти ограничения относятся и к PAL и к
NTSC.   Для  получения  высококачественного  звука  существуют  другие
ограничения для  периода  (см.  раздел  "Создание  высококачественного
звука").

ПРИМЕЧАНИЕ

Меньшее значение периода соответствует более высокому звуку, а высокое
значение - более низкому звуку.

ОГРАНИЧЕНИЯ ВЫБОРА ПЕРИОДА СЕМПЛИРОВАНИЯ

Период семплирования ограничивается числом циклов DMA выделенных аудио
каналу. Каждый аудио канал имеет один слот DMA в каждой горизонтальной
строке развертки экрана и может делать две выборки  данных  за  каждую
горизонтальную   строку  развертки.  Следующие  вычисления  показывают
максимально возможную частоту семплирования (семплов в секунду).

   2 семпла/строка * 262.5 строк/кадр * 59.94 кадров/сек.
                    = 31469 семплов/сек.

Число 31469 - теоретический максимум, но железо разработано так, чтобы
обрабатывать 28867 семплов/сек.

Период  тиков  системных  часов  -  279.365  наносекунд,  или  .279365
микросекунд.

Максимальная скорость выборки семплов  -  28,867  семплов  в  секунду,
следовательно  период  будет  равен  -  34.642  микросекунды  на семпл
(1/28867 = .000034642). Ниже приведена формула для вычисления  периода
семплирования:

          интервал между выборками данных    частота тиков часов
Период =  ------------------------------- = ---------------------
            интервал между тиками часов     частота семплирования

Таким образом, минимальное значение периода получается делением 34.642
микросекунд/семпл на время одного тика часов (микросекунд/интервал) :

              34.642 микросекунд/семпл
Мин. период= --------------------------- = 124 тика/семпл
             0.279365 микросек./тик

или:
              3,579,545 тиков/сек.
Мин. период = -------------------- = 124 тика/семпл
               28,867 семплов/сек.

Следовательно, в регистр периода  должно  быти  записано  значение  не
менее 124, для того, чтобы гарантировать, что аудио DMA будет способно
осуществить следующую выборку данных. Если значение периода  -  меньше
124,  к тому времени, когда обратный счетчик достигнет 0, аудио DMA не
будет иметь достаточное количество времени для осуществления следуюшей
выборки, что приведет к многократному повторению последнего семпла.

28,867 семплов/сек. - также максимальная частота для  PAL  системы.  И
исходя  из  немного различающейся частоты системных часов, минимальное
значение периода будет равно 123 тиков/семпл.

                  ЧАСТОТА ТАЙМЕРА
                   NTSC      PAL       ЕДИНИЦЫ

Частота таймера  3579545   3546895   тиков в секунду
Период таймера   0.279365  0.281937  микросекунд на тик

ПРИМЕЧАНИЕ

Период таймера получается из частоты:

                       1
период таймера = ---------------;
                 Частота таймера

Затем результат переводится в микросекунды.

ОПРЕДЕЛЕНИЕ ЗНАЧЕНИЕ ПЕРИОДА

После того,  как  вы  определили  желаемый  интервал  между  выборками
данных,  вы  можете вычислить значение, помещаемое в регистр периода с
помощью формулы:

           Желаемый период       Частота таймера
Период = -------------------- = -----------------
         Период тиков таймера   Выборок в секунду

Например, вы хотите получить  звук  с  частотой  1  KHz,  использующий
таблицу из восьми семплов (четыре слова данных) (см. Рисунок 5-3).



                    РИСУНОК 5-3: Пример синусоиды.

Значения :      0
                90
               127
                90
                 0
               -90
              -127
               -90

Для вывода серии из восьми семплов с  частотой  1KHz  (1000  циклов  в
секунду),  каждый  полный  цикл  должен выводится за 1/1000-ю секунды.
Следовательно, каждый семпл должен выводиться за 1/8-ю этого  времени.
Получается 1000 микросекунд на весь звук или 125 микросекунд на семпл.
Для того, чтобы правильно воспроизвести этот звук, период должен  быть
равен:

          125 микросекунд/семпл
Период = ------------------------ = 447 тиков/семпл
         0.279365 микросекунд/тик

Для установки периода необходимо записать значение периода  в  регистр
AUDxPER,  где  "x"  -  номер используемого канала. Например, следующая
команда показывает,  как  записать  значение  периода  447  в  регистр
периода нулевого канала.

SETAUDOPERIOD:
              LEA    CUSTOM,a0
              MOVE.W #447,AUD0PER(a0)

Для  получения   высококачественный   звука,   вы   должны   соблюдать
ограничения,  накладываемые на значения периода, обсуждаемые в разделе
"Создание высококачественного звука."

Более подробно связь между периодом и высотой звука описана в  разделе
в  конце  главы,  содержащем  список  нот и их значений по музыкальной
шкале.

ПРОИГРЫВАНИЕ ЗВУКА

После определения расположения данных,  длины,  громкости  и  периода,
можно проиграть звук, запустив аудио-DMA. После запуска DMA звук будет
проигрываться до тех пор, пока вы его не  остановите.  Таким  образом,
данные играются много раз, производя устойчивый звук. Система повторно
использует  значения   регистров   расположения   при   каждом   цикле
проигрывания звука.

Для использования аудио-DMA (или  любого  другого  DMA),  должен  быть
включен   бит  DMAEN  в  регистре  DMACON.  Когда  и  DMAEN  и  AUDxEN
установлены, запускается DMA для канала "x". Эти биты  и  их  значения
показаны в таблице 5-3.

              ТАБЛИЦА 5-3: Биты включения DMA и Аудио Каналов

                        Регистр DMACON

             Бит   Название  Функция

              15   SET/CLR   При   включенном   бите   устанавливаются
                             значения   включенных   бит,   не  трогая
                             остальных

               9   DMAEN     Пока  этот  бит  включен, возможна работа
                             DMA

               3   AUD3EN    Включение 3 аудио-канала

               2   AUD2EN    Включение 2 аудио-канала

               1   AUD1EN    Включение 1 аудио-канала

               0   AUD0EN    Включение 0 аудио-канала

Например,  при  использовании  нулевого  канала,  для  включения   DMA
записываются  1  в  бит  9 и для запуска аудио канала - 1 в бит 0, как
показано ниже.

BEGINCHAN0:
            LEA    CUSTOM,a0
            MOVE.W #(DMAF_SETCLR!DMAF_AUD0!DMAF_MASTER),DMACON(a0)

ОСТАНОВКА АУДИО DMA

Вы можете остановить канал в любой момент, записав  0  в  бит  AUDxEN.
Однако,  вы  не  сможете  продолжить  вывод звука в той же самой точке
снова записав 1 в этот бит. Включение звукового  канала  почти  всегда
начинает  вывод  данных  снова  с  начала данных, на которые указывает
регистр расположения. Если канал отключается на очень  короткое  время
(меньше  чем  два  периода семплирования) указатели может оставться на
том-же месте и таким  образом  звук  продолжится  с  того  места,  где
остановился.

Следующий пример показывает,  как  останавить  аудио  DMA  для  одного
канала.

STOPAUDCHAN0:
      LEA    CUSTOM,a0
      MOVE.W #(DMAF_AUD0),DMACON(a0)

ОБОБЩЕНИЕ

Эти шаги необходимые для получения устойчивого звука:

1. Определите форму волны
2. Создайте набор данных,  содержащий  пары  семплов  (слова  данных).
Обычно, набор данных содержит определение одного звука.
3. Установите регистры размещения:
           AUDxLCH (старшие три бита)
           AUDxLCL (младшие пятнадцать бит)
4. Установите число слов данных в регистре длины, AUDxLEN
5. Установите регистр громкости, AUDxVOL.
6. Установите регистр периода, AUDxPER
7. Запустите аудио DMA, записав 1 в бит 9, DMAEN, со включенным  битом
SET/CLR  и  1  в позиции AUDxEN для того канала или каналов которые вы
хотите использовать.

ПРИМЕР

В  этом  примере,  собирающем  вместе  все   сегменты   программы   из
предшествующих  разделов,  синусоида  проигрывается  через  канал 0. В
примере используется монопольный доступ к аудио-железу системы,  и  он
не будет работать в многозадачной среде.

MAIN:
       LEA CUSTOM,a0         ; Базовый адрес чипсета
       LEA SINEDATA(pc),a1   ; Начало данных
WHEREODATA:
       MOVE.L a1,AUD0LCH(a0) ; Запись адреса как длинного слова
SETAUDOLENGTH:
       MOVE.W #4,AUD0LEN(a0) ; Установка длины в словах
SETAUDOVOLUME:
       MOVE.W #64,AUD0VOL(a0); Используем максимальную громкость
SETAUDOPERIOD:
       MOVE.W #447,AUD0PER(a0)
BEGINCHAN0:
       MOVE.W #(DMAF_SETCLR!DMAF_AUD0!DMAF_MASTER),DMACON(a0)
       RTS                   ; Возврат
       DS.W 0                ; Выравнивание по словам
SINEDATA:
       DC.B 0, 90, 127, 90, 0, -90, -127, -90

       END

СОЗДАНИЕ СЛОЖНЫХ ЗВУКОВ

Кроме простых звуков, Вы можете создавать более сложные  звуки,  таких
как  различные  музыкальные  ноты, объединенные в одноголосую мелодию,
различные ноты проигрывающиеся одновременно, или модулируемые звуки.

ОБЪЕДИНЕНИЕ ЗВУКОВ

Звуки соединяются путем записи регистров расположения и длины, запуска
DMA  и  последующей  перезаписи  регистров так, чтобы они указывали на
следующий звук, который вы хотите проиграть. Это  делается  с  помощью
аудио-прерываний   и   благодаря  существованию  резервных  регистров.
Регистры размещения и длины  считываются  и  сохраняются  в  резервных
регистрах  каналом  DMA  перед  началом вывода звука. После считывания
содержимого регистров вы можете изменить  их  значения  без  нарушения
вывода текущего звука.

Прерывание  происходит  сразу  после  того,  как  аудио   DMA   считал
содержимое  регистров  размещения  и  длины  и  сохранил их значения в
резервных регистрах. После этого  Вы  можете  перезаписать  содержимое
этих  регистров так, чтобы они указывали на следующий звук. Комбинация
резервных регистров и прерываний позволяет находиться все время на шаг
впереди вывода звука, получающегося непрерывным и гладким.

Если вы не перезаписываете содержимое регистров, DMA будет  все  время
повторять   один  и  тот-же  звук.  Каждый  раз  когда  счетчик  длины
становится равным нулю, регистры размещения  и  длины  перезагружаются
теми  же  самыми  значениями,  повторяя  звук,  данные  которого  были
занесены в них последний раз.

ПРИМЕР

Этот пример подробно показывает систему запуска аудио DMA в  пошаговом
режиме.

Допустим, Вы хотите получить звук, состоящий из чередующихся синусоиды
и  волны  треугольной  формы.  Следующий  алгоритм показывает действия
вашей программы по взаимодействию с аудио DMA. В  примере  принимается
что  период, громкость, и длина данных для обоих звуков остаются те же
самые.

АЛГОРИТМ УСТАОВКИ ПРЕРЫВАНИЯ

Если (звук = 'треугольник')
             записать адрес 'синуса' в AUD0LCL
Иначе если (звук = 'синус')
             записать адрес 'треугольника' в AUD0LCL

ОСНОВНАЯ ПРОГРАММА

1. Установить громкость, период и длину
2. Записать адрес 'синуса' в AUD0LCL
3. Запустить DMA.
4. Продолжить выполнение программы

ОТВЕТНЫЕ ДЕЙСТВИЯ СИСТЕМЫ

Как только запустится DMA

A. Создается резевная копия регистра длины AUD0LEN.
B. Создается резевная копия регистра  размещения  AUD0LCL  (она  будет
использоваться как указатель на текущее слово данных).
C. Генерируется прерывание 68000, сигнализирующее о том,  что  система
завершила копирование регистров размещения и длины.
D. Начинается выборка аудио данных, используя слоты аудио DMA.

ПРОИГРЫВАНИЕ МНОЖЕСТВА ЗВУКОВ ОДНОВРЕМЕННО

Вы можете проиграть множество звуков одновременно, используя несколько
каналов  или  суммируя  семплы  нескольких  наборов данных, проигрывая
полученные суммы через один канал.

Поскольку все четыре аудио канала программируются  независимо,  каждый
канал  имеет  собственный набор данных; таким образом на каждом канале
может проигрываться свой звук.

МОДУЛЯЦИЯ ЗВУКА

Чтобы получать более сложные звуковые эффекты, вы можете  использовать
один   звуковой   канал  для  того,  чтобы  модулировать  другой.  Это
увеличивает диапазон и тип получаемых эффектов. Вы можете модулировать
частоту канала или амплитуду, или и то и другое вместе.

Амплитудная модуляция оказывает влияние на громкость звука.  Этот  вид
модуляции часто используется для получения эффектов вибрато и тремоло.
Частотная модуляция воздействует  на  период  звука.  При  этом,  хотя
основная  форма  волны остается той же самой, высота увеличивается или
уменьшается частотной модуляцией.

Система использует один канал для модуляции другого  тогда,  когда  вы
объединяете  два канала. Биты объединения в регистре ADKCON указывают,
как интерпретировать данные аудио канала. (см. таблицу ниже).  Обычно,
каждый канал производит звук, если ему разрешено. Если бит объединения
для аудио канала установлен, то канал прекращает  производить  звук  и
его  данные  используются  для  модуляции  звука  следующего по номеру
канала. Когда канал используется как модулятор, слова данных более  не
обрабатываются как два отдельных байта. Вместо этого, они используются
как слова "модулятора". Слова данных из канала модулятора записываются
в  соответствующие  регистры  модулируемого  канала,  когда обнуляется
регистр периода канала-модулятора.

Для модуляции только амплитуды звука, вы должны объединить каналы  как
модулятор громкости. Задайте данные канала модулятора как набор слов в
следующем формате:

        БИТЫ    ФУНКЦИЯ

       15 - 7   Не используются
        6 - 0   Громкость, V6-V0

Если Вы хотите  модулировать  только  частоту,  Вы  должны  объединять
каналы  как  модулятор периода. Задайте данные канала как набор слов в
следующем формате:

        БИТЫ    ФУНКЦИЯ

       15 - 0   Период, P15-P0

Если вы хотите модулировать период  и  громкость  на  одном  и  том-же
канале,  вы должны объединять канал как модулятор громкости и периода.
Например, если канал 0 используется  чтобы  модулировать  и  период  и
громкость канала 1, устанавливается два бита объединения - бит 0 чтобы
модулировать громкость и  бит  4,  чтобы  модулировать  период.  Когда
период  и  громкость  модулируются  одновременно,  слова данных канала
модулятора поочередно интерпретируются  как  информация  о  периоде  и
громкости.

Данные, приведенные в Таблице 5-4 показывает различия в  интерпретации
данных  при  использовавнии канала для непосредственного вывода звука,
для модуляции громкости, периода и того и другого вместе

              ТАБЛИЦА 5-4: Интерпретация Данных в Режиме Объединения


СЛОВА     НЕЗАВИСИМЫЙ      МОДУЛЯЦИЯ ПЕРИОДА  МОДУЛЯЦИЯ     МОДУЛЯЦИЯ
ДАННЫХ  (НЕ МОДЕЛИРУЕМЫЙ)     И ГРОМКОСТИ      ПЕРИОДА       ГРОМКОСТИ

Слово 1 |данные|данные|    |громкость|         |период|    |громкость|
Слово 2 |данные|данные|    |период|            |период|    |громкость|
Слово 3 |данные|данные|    |громкость|         |период|    |громкость|
Слово 4 |данные|данные|    |период|            |период|    |громкость|

Длины данных модулятора и модулируемых каналов полностью независимы.

Каналы объединяются системой в определенном порядке,  как  показано  в
Таблице   5-5.   Чтобы   присоединить  канал  в  качестве  модулятора,
установите биты объединения.  Если  вы  устанавливаете  бит  модуляции
громкости  или  периода  для  какого-либо  канала, вывод звука с этого
канала будет отключен, и канал  будет  объединяться  со  следующим  по
номеру  каналом. Из этого следует, что канал 3 не может использоваться
в качестве модулятора. Запись 1 в биты объединения для канала 3  всего
лишь отключают вывод звука.

              ТАБЛИЦА 5-5: Объединение Каналов для Модуляции

                            РЕГИСТР ADKCON

              Бит  Имя      Функция

               7   ATPER3   Не использовать канал 3
                            (Отключение аудио вывода канала 3)
               6   ATPER2   Использовать канал 2 для модуляции периода
                            канала 3
               5   ATPER1   Использовать канал 1 для модуляции периода
                            канала 2
               4   ATPER0   Использовать канал 0 для модуляции периода
                            канала 1
               3   ATVOL3   Не использовать канал 3
                            (Отключение аудио вывода канала 3)
               2   ATVOL2   Использовать канал 2 для модуляции
                            громкости канала 3
               1   ATVOL1   Использовать канал 1 для модуляции
                            громкости канала 2
               0   ATVOL0   Использовать канал 0 для модуляции
                            громкости канала 1

СОЗДАНИЕ ВЫСОКОКАЧЕСТВЕННОГО ЗВУКА

При попытке создать высококачественный  звук,  вы  должны  рассмотреть
следующие факторы:

СОЗДАНИЕ МЕЖЗВУКОВЫХ ПЕРЕХОДОВ

Для того, чтобы предотвращать появление  неприятных  звуков  в  местах
стыковки  звуков  друг с другом, вы должны сглаживать эти переходы. Вы
можете избегать "щелчков" обеспечивая одну и ту же громкость  в  конце
старого  и в начале нового звука. Вы можете избегать "хлопков" начиная
звук только в точке с нулевой амплитудой. Вы можете избегать "ударов",
поддерживая  среднюю амплитуду каждого звука на одном и том же уровне.
Средняя амплитуда - сумма байт в звуке деленная на число байт в звуке.

ЧАСТОТА СЕМПЛИРОВАНИЯ

Если вам необходимо точное значение частоты семплирования,  то  иногда
получается  так,  что  желаемая частота лежит между двумя доступными в
данный момент частотами. В таких  случаях  Вы  можете  скорректировать
длину  аудио  данных  так,  чтобы  при использовании доступной частоты
вывод звука происходил с нужной Вам частотой.

Для высоких частот Вы можете также использовать звуковые данные, длина
которых  больше,  чем  один  полный цикл звука. Это делается для того,
чтобы более точно воспроизвести частоту. См. на рисунке 5-4.



               РИСУНОК 5-4: Звук с повторяющимися циклами.

ЭФФЕКТИВНОСТЬ

При  управлении  аудио  DMA  неизбежно  возникают   непроизводительные
затраты.  Если  вы хотите получить непрерывный гладкий звук, вы должны
избегать непроизводительных затрат настолько, насколько это  возможно.
Вообще,  больший  аудио  буфер  обеспечивает  менее  частое прерывание
процессора для установки указателей на  начало  следующего  буфера  и,
следовательно,  будет  выполняться  меньше операций. Если используется
только один аудио буфер, железо  автоматически  сбрасывает  указатели,
так   что  в  этом  случае  не  требуется  никаких  непроизводительных
программных затрат.

В разделе "Объединение звуков" показано как соединять  вместе  "концы"
звуков  на прерываниях - изменяя значения регистров расположения. Если
система тяжело загружена, возможна  такая  ситуация,  когда  ответ  на
прерывание  приходит  не  вовремя,  что  не  гарантирует гладкий звук.
Следовательно, желательно  использовать  самые  длинные  из  возможных
наборов  аудио данных. Благодаря преимуществам DMA, а также уменьшению
числа  прерываний  на  которые  должен  реагировать  68000,   звучание
становится более плавным.

УМЕНЬШЕНИЕ ШУМА

Чтобы уменьшить уровень шума и получить более точный звук,  попробуйте
использовать в аудио данных полный диапазон возможных значений от -128
до 127. Это несколько уменьшает ошибку квантования, и как бы добавляет
больше бит к активному сигналу. Шумовые эффекты квантования вызываются
ошибкой округления. При  воспроизведении  сигнала,  амплитуда  каждого
семпла  задается  с  фиксированной  точностью  (8  бит). Отличие между
оригинальным значением амплитуды и вашим приближением  и  есть  ошибка
округления, вызывающая шум.

Удваивая амплитуду, вы убираете  половину  шума,  потому  что  разница
между  истинным  и  полученным  значеним  остается  той  же  самой,  а
следовательно, меньшей долей всей амплитуды звука.

Другими словами, если вы используете в звуке диапазон  от  +3  до  -3,
ошибка  вывода  будет  значительно  большей,  чем  тот-же  звук,  но в
диапазоне от +127 до -128. Цифровое  значение  амплитуды  звука  будет
иметь  пропорционально  меньшую  ошибку,  поскольку,  увеличивая число
возможных уровней, вы уменьшаете относительный размер каждого шага  и,
следовательно, уменьшаете ошибку.

Тихие  звуки  можно  получить  оставив  амплитуду   максимальной,   но
регулируя  громкость.  Этот  метод  обеспечивает  тот же самый уровень
точности (отношение сигнал/шум) для тихих звуков  как  и  для  громких
звуков.

ALIASING DISTORTION

При использовании семплирования для получения аудио данных,  возникает
побочный   эффект,   причиной   которого  является  "биение"  скорости
семплирования или объединение с желаемой частотой. В результате  этого
эффекта   возникает   две   дополнительные  частоты,  одна  -  частота
семплирования плюс желаемая частота, а другая - частота  семплирования
минус желаемая частота. Это явление называется aliasing distortion.

Aliasing distortion исключается, когда частота семплирования превышает
частоту  вывода  по  крайней  мере  на  7 KHz. При этом частота биений
располагается  вне   диапазона   действия   фильтра   низких   частот,
отключающего  нежелательные  частоты.  На  рисунке  5-5 показан график
области сглаживания частоты  фильтром  низких  частот  используемым  в
системе.

        ^
       /|\
        |
        |
   0 db |____
        |    \
        |     \    Работа фильтра
        |      \
 -30 db |_______\_________________________________\
              |     |     |     |     |     |     /
             05    10    15    20    25    30
                             KHz

          Фильтр пропускает все частоты нихе 4KHz

    Рис 5-5: Область сглаживания частот фильтром низких частот

Рисунок   5-6   показывает    допустимость    использования    частоты
семплирования,  равной  12  KHz для получения звука частотой 4KHz. Обе
бьющих частоты - вне диапазона работы фильтра, как вычислено ниже:

                                 12+4= 16KHz
                                 12-4=  8KHz

        ^ Работа фильтра
       /|\
        |           Частота семплирования 12 KHz
        |             |
   0 db |____         |
        |    \   мин  |   макс
        |     \   |   |     |
        |   4| \  |   |     |
 -30 db |____|__\_|___|_____|_____________________\
            / |     |     |     |     |     |     /
           / 05    10    15    20    25    30
          /                  KHz
         /
     Желаемая частота вывода звука

        Рис 5-6: Бесшумный вывод (нет Aliasing Distortion)

Как Вы можете видеть на Рисунке 5-7, недопустимо использовать  частоту
семплирования  10  KHz  для  получения  звука с частотой 4KHz. Одна из
бьюших частот (10 - 4) - попадает внутрь диапазона  действия  фильтра,
допускающего некоторые из этих нежелательных частот на аудио-вывод.


        ^ Работа фильтра
       /|\
        |        Частота семплирования 10 KHz
        |           |
   0 db |____       |
        |    \  мин |   макс
        |     \  |  |    |
        |   4| \ |  |    |
 -30 db |____|__\|__|____|______________________\
            / |     |     |     |     |     |   /
           / 05    10    15    20    25    30
          /                  KHz
         /
     Желаемая частота вывода звука

                  Рис 5-7: Небольшой Aliasing Distortion

Из всего этого вытекает следующее уравнение, показывающее, что частота
семплирования  должна  превышать  частоту  вывода по крайней мере на 7
KHz, в  результате  чего  частота  биений  будет  входить  в  диапазон
сглаживающего фильтра:

     Минимальная частота семплирования = частота самого высокого
                          компонента + 7 KHz

В качестве компонента частоты в  уравнении  задается  "частота  самого
высокого  компонента"  потому  что в реальном звуке присутствует смесь
различных частот, а не чистая синусоида.

ФИЛЬТР НИЗКИХ ЧАСТОТ

В системе имеется фильтр низких  частот,  который  устраняет  aliasing
distortion,  как  описано выше. Фильтр активизируется на частоте около
4KHz и постепенно начинает уменьшать (отключать) сигнал. Вообще, вы не
можете  ясно слышать частоты выше 7KHz. Если вы используете частоты от
0 до 7 KHz, вы должны осуществлять семплирование с частотой  не  менее
14 KHz, которая соответствует периоду семплирования от 124 до 256.

При значениях периода более 320, вы начинаете терять  верхние  частоты
получаемого звука, как показано в табл 5-6.

     ТАБЛИЦА 5-6: Отношение частоты семплирования и аудио частоты

                                  Период   Частота      Максимальная
                                        семплирования выходная частота
                                            (KHz)         (KHz)
Максимальная частота семплирования  124      29             7

Минимальная частота семплирования   256      14             7
для звука частотой 7 KHz

Недостаточная частота семплирования 320      11             4
для звука частотой 7 KHz

В  A2000  с  2х  слойными  платами  и  поздних  моделях  AS00  имеется
управляющий  бит  который  позволяет управлять фильтром низких частот.
Этот бит - тот же самый вывод  8520  CIA,  который  управлет  яркостью
индикатора питания компьютера. Обход фильтра позволяет улучшить звук в
некоторых прикладных программах, но может требоваться внешний фильтр с
соответствующей частотой.

ИСПОЛЬЗОВАНИЕ ПРЯМОГО (НЕ DMA) АУДИО ВЫВОДА

Еще один возможный метод создания звука  -  это  запись  аудио  данных
непосредственно   в  адреса  аудио  вывода  слово  за  словом,  вместо
установки регистров, указывающих на аудио данные в памяти. Этот  метод
получения  звука требует больше процессорного времени и, следовательно
не рекомендуется к использованию.

Для использования прямого аудио вывода,  не  включайте  DMA  для  того
аудио  канала,  который  вы  хотите использовать, это изменяет порядок
прихода  прерываний.  Обычно,  прерывание  приходит  после  того,  как
считался  адрес  данных;  при прямом аудио выводе, прерывание приходит
после того, как выведено одно слово данных.

В отличие от вывода данных, управляемого DMA, при прямом аудио выводе,
если  вы  не успеете записать новый набор данных в адреса аудио вывода
за два интервала семплирования, звук перестанет изменяться.  Последнее
записанное    значение    останется    на   выходе   цифро-аналогового
преобразователя.

Регистры громкости и периода устанавливаются как обычно.

МУЗЫКАЛЬНАЯ ШКАЛА СООТВЕТСТВИЯ

Таблица которую 5-7 дает близкое приближение  соответствия  нот  одной
октавы  при  размере  семпла  -  16  байт. Столбец "Период" обозначает
период, записываемый в регистр периода. Регистр длины  AUDxLEN  должен
быть  равен  8 (16 байт = 8 слов). Семпл должен представлять один цикл
звуковой волны.

  ТАБЛИЦА 5-7: Соответствие частот октавы для 16-ти байтных семплов

  Период  Период  Нота  Идеальная      Реальная       Реальная
  в NTSC  в PAL          частота    частота в NTSC  частота в PAL

   254     252     A      880.0         880.8           879.7
   240     238     A#     932.3         932.2           931.4
   226     224     B      987.8         989.9           989.6
   214     212     C     1046.5        1045.4          1045.7
   202     200     C#    1108.7        1107.5          1108.4
   190     189     D     1174.7        1177.5          1172.9
   180     178     D#    1244.5        1242.9          1245.4
   170     168     E     1318.5        1316.0          1319.5
   160     159     F     1396.9        1398.3          1394.2
   151     150     F#    1480.0        1481.6          1477.9
   143     141     G     1568.0        1564.5          1572.2
   135     133     G#    1661.2        1657.2          1666.8

В этой Таблице показаны значения периода для нот  второй  октавы  выше
средней  C  при  использовании  16-ти байтных семплов. Для того, чтобы
генерировать звуки более низких октав,  есть  два  метода  -  удвоение
значения периода и удвоение размера семпла.

Когда вы удваиваете период, время между выборками удваивается, так что
семпл  будет  играться  в  2  раза  дольше.  Это означает, что частота
полученного звука уменьшается в 2 раза, что  дает  более  низкий  звук
следующей октавы. Таким образом, если вы проигрывете C с периодом 214,
а затем проигрываете тот же самый семпл с периодом 428, то второй звук
будет та-же нота C, но на октаву ниже.

Аналогично, если вы удваиваете размер семпла, он  будет  проигрываться
вдвое  дольше  и  полученный звук будет на октаву ниже. Таким образом,
если у Вас есть 2 семпла одного и того-же звука -  первый  8  байт,  а
второй  -  16  байт,  то  проиграв  их  с  одной и той-же скоростью Вы
обнаружите, что 16-ти байтный семпл играется на октаву ниже.

Семплы для шкалы соответствия обычно представляют  собой  один  полный
цикл  ноты.  Для  избежания aliasing distortion вы должны использовать
значения периода только в  диапазоне  124-256.  Эти  значения  периода
соответствуют  скорости  проигрывания  14-28K  семплов  в секунду, что
является наиболее эффективной  скоростью  при  использовании  амижного
7-ми килогерцового фильтра для предотвращения шума. Для того, чтобы не
выходить за пределы этого диапазона вам будут нужны разные семплы  для
каждой октавы.

Если вы не можете использовать разные семплы для каждой октавы,  тогда
вам  надо  корректировать  значение периода, используя полный диапазон
124-65536.  Это  проще  для   программирования,   но   может   вызвать
нежелательный высокочастотный шум в получаемом звуке. Для подробностей
см. раздел "Aliasing Distortion".

Значения в  Таблице  5-7  рассчитывались  по  следующей  формуле.  Для
вычисления частоты по заданным периоду и размеру семпла используйте:

                Частота таймера         3579545
    Частота = --------------------  =  ---------
              Байт в семпле*Период     16*Период

Частота таймера в системе  NTSC  равна  3579545  тиков  в  секунду.  В
системе  PAL,  частота  таймера равна 3546895 тиков в секунду. "Байт в
семпле" это число байт в одном цикле волны. Частота  таймера  получена
делением  значения системных часов на 2. Это значение будет изменяться
при использовании внешней синхронизации (генлока).

Используя эту формулу вы  можете  сгенерировать  значения  для  любого
произвольного  семпла.  Таблица  5-8  дает близкое приближение к пятой
октаве, используя 5 семплов. Значения были рассчитаны с  помощью  этой
формулы. Обратите внимание, что в каждой октаве значения периода те же
самые,  но  размер  семпла  делится   на   два.   Приведенные   семплы
представляют собой волну простой треугольной формы.

               ТАБЛИЦА 5-8: Частоты Пятой Октавы

 Период  Период  Нота  Идеальная      Реальная      Реальная
 в NTSC  в PAL          частота    частота в NTSC частота в PAL

   254     252     A      55.00       55.05       54.98
   240     238     A#     58.27       58.26       58.21
   226     224     B      61.73       61.87       61.85
   214     212     C      65.40       65.34       65.35
   202     200     C#     69.29       69.22       69.27
   190     189     D      73.41       73.59       73.30
   180     178     D#     77.78       77.68       77.83
   170     168     E      82.40       82.25       82.47
   160     159     F      87.30       87.39       87.13
   151     150     F#     92.49       92.60       92.36
   143     141     G      98.00       97.78       98.26
   135     133     G#    103.82      103.57      104.17

Размер семпла = 256 байт, AUDxLEN = 128

   254     252     A     110.00      110.10       109.96
   240     238     A#    116.54      116.52       116.43
   226     224     B     123.47      123.74       123.70
   214     212     C     130.81      130.68       130.71
   202     200     C#    138.59      138.44       138.55
   190     189     D     146.83      147.18       146.61
   180     178     D#    155.56      155.36       155.67
   170     168     E     164.81      164.50       164.94
   160     159     F     174.61      174.78       174.27
   151     150     F#    184.99      185.20       184.73
   143     141     G     196.00      195.56       196.52
   135     133     G#    207.65      207.15       208.35

Размер семпла = 128 bytes, AUDxLEN = 64

   254     252     A     220.00      220.20       219.92
   240     238     A#    233.08      233.04       232.86
   226     224     B     246.94      247.48       247.41
   214     212     C     261.63      261.36       261.42
   202     200     C#    277.18      276.88       277.10
   190     189     D     293.66      294.37       293.23
   180     178     D#    311.13      310.72       311.35
   170     168     E     329.63      329.00       329.88
   160     159     F     349.23      349.56       348.55
   151     150     F#    369.99      370.40       369.47
   143     141     G     392.00      391.12       393.05
   135     133     G#    415.30      414.30       416.70

Размер семпла = 64 bytes, AUDxLEN = 32

   254     252     A      440.0       440.4       439.8
   240     238     A#    466.16      466.09       465.72
   226     224     B     493.88      494.96       494.82
   214     212     C     523.25      522.71       522.83
   202     200     C#    554.37      553.77       554.20
   190     189     D     587.33      588.74       586.46
   180     178     D#    622.25      621.45       622.70
   170     168     E     659.26      658.00       659.76
   160     159     F     698.46      699.13       697.11
   151     150     F#    739.99      740.80       738.94
   143     141     G     783.99      782.24       786.10
   135     133     G#    830.61      828.60       833.39

Размер семпла = 32 bytes, AUDxLEN = 16

   254     252     A      880.0       880.8       879.7
   240     238     A#     932.3       932.2       931.4
   226     224     B      987.8       989.9       989.6
   214     212     C     1046.5      1045.4       1045.7
   202     200     C#    1108.7      1107.5       1108.4
   190     189     D     1174.7      1177.5       1172.9
   180     178     D#    1244.5      1242.9       1245.4
   170     168     E     1318.5      1316.0       1319.5
   160     159     F     1396.9      1398.3       1394.2
   151     150     F#    1480.0      1481.6       1477.9
   143     141     G     1568.0      1564.5       1572.2
   135     133     G#     661.2      1657.2       1666.8

Размер семпла = 16 bytes, AUDxLEN = 8

                    256-ти байтный семпл

   0    2    4    6    8   10   12   14   16   18   20   22   24   26
  28   30   32   34   36   38   40   42   44   46   48   50   52   54
  56   58   60   62   64   66   68   70   72   74   76   78   80   82
  84   86   88   90   92   94   96   98  100  102  104  106  108  110
 112  114  116  118  120  122  124  126  128  126  124  122  120  118
 116  114  112  110  108  106  104  102  100   98   96   94   92   90
  88   86   84   82   80   78   76   74   72   70   68   66   64   62
  60   58   56   54   52   50   48   46   44   42   40   38   36   34
  32   30   28   26   24   22   20   18   16   14   12   10    8    6
   4    2    0   -2   -4   -6   -8  -10  -12  -14  -16  -18  -20  -22
 -24  -26  -28  -30  -32  -34  -36  -38  -40  -42  -44  -46  -48  -50
 -52  -54  -56  -58  -60  -62  -64  -66  -68  -70  -72  -74  -76  -78
 -80  -82  -84  -86  -88  -90  -92  -94  -96  -98 -100 -102 -104 -106
-108 -110 -112 -114 -116 -118 -120 -122 -124 -126 -127 -126 -124 -122
-120 -118 -116 -114 -112 -110 -108 -106 -104 -102 -100  -98  -96  -94
 -92  -90  -88  -86  -84  -82  -80  -78  -76  -74  -72  -70  -68  -66
 -64  -62  -60  -58  -56  -54  -52  -50  -48  -46  -44  -42  -40  -38
 -36  -34  -32  -30  -28  -26  -24  -22  -20  -18  -16  -14  -12  -10
  -8   -6   -4   -2

                    128-ми байтный семпл

   0    4    8   12   16   20   24   28   32   36   40   44   48   52
  56   60   64   68   72   76   80   84   88   92   96  100  104  108
 112  116  120  124  128  124  120  116  112  108  104  100   96   92
  88   84   80   76   72   68   64   60   56   52   48   44   40   36
  32   28   24   20   16   12    8    4    0    4    8   12   16   20
  24   28   32   36   40   44   48   52   56   60   64   68   72   76
  80   84   88   92   96  100  104  108  112  116  120  124 -127 -124
-120 -116 -112 -108 -104 -100  -96  -92  -88  -84  -80  -76  -72  -68
 -64  -60  -56  -52  -48  -44  -40  -36  -32  -28  -24  -20  -16  -12
  -8   -4

                    64-х байтный семпл

   0    8   16   24   32   40   48   56   64   72   80   88   96  104
 112  120  128  120  112  104   96   88   80   72   64   56   48   40
  32   24   16    8    0   -8  -16  -24  -32  -40  -48  -56  -64  -72
 -80  -88  -96 -104 -112 -120 -127 -120 -112 -104  -96  -88  -80  -72
 -64  -56  -48   40  -32  -24  -16   -8

                    32-х байтный семпл

   0   16   32   48   64   80   96  112  128  112   96   80   64   48
  32   16    0  -16  -32  -48  -64  -80  -96 -112 -127 -112  -96  -80
 -64    4    8  -32  -16

                    16-ти байтный семпл

   0   32   64   96  128   96   64   32    0  -32  -64  -96 -127  -96
 -64  -32

СООТВЕТСТВИЕ МЕЖДУ ЗНАЧЕНИЯМИ ГРОМКОСТИ И ЗНАЧЕНИЯМИ ДЕЦИБЕЛ

В таблице 5-9 показано соответствие между значениями громкости в
децибеллах для каждого из возможных уровней громкости звука.

         ТАБЛИЦА 5-9: Громкость и децибеллы.

   Громкость  Децибеллы     Громкость  Децибеллы

     64         0.0            32        -6.0
     63        -0.1            31        -6.3
     62        -0.3            30        -6.6
     61        -0.4           129        -6.9
     60        -0.6            28        -7.2
     59        -0.7            27        -7.5
     58        -0.9            26        -7.8
     57        -1.0            25        -8.2
     56        -1.2            24        -8.5
     55        -1.3            23        -8.9
     54        -1.5            22        -9.3
     53        -1.6            21        -9.7
     52        -1.8            20       -10.1
     51        -2.0            19       -10.5
     50        -2.1            18       -11.0
     49        -2.3            17       -11.5
     48        -2.5            16       -12.0
     47        -2.7            15       -12.6
     46        -2.9            14       -13.2
     45        -3.1            13       -13.8
     44        -3.3            12       -14.5
     43        -3.5            11       -15.3
     42        -3.7            10       -16.1
     41        -3.9             9       -17.0
     40         4.1             8       -18.1
     39         4.3             7       -19.2
     38         4.5             6       -20.6
     37         4.8             5       -22.1
     36        -5.0             4       -24.1
     35        -5.2             3       -26.6
     34        -5.5             2       -30.1
     33        -5.8             1       -36.1
                                0    Минус бесконечность

МЕХАНИЗМ АУДИО СОСТОЯНИЙ

На рисунке 5-8 показаны различные аудио состояния.  У  каждого  канала
свой,  раздельный  механизм  аудио  состояний.  Всего  имеется  восемь
состояний, которые  синхронизируются  с  частотой  таймера  (3.58  MHz
NTSC).  Три  из  состояний в основном неиспользуемы и только переводят
обратно в неактивное состояние (000). Один из маршрутов разработан для
управления  операциями  прерываний  (данные  пересылает  процессор), а
другой  маршрут  разработан  для  операций,  управляемых  DMA  (данные
пересыдает Agnus).

Во время операции, управляемой прерываниями, передача в основной  цикл
(состояния 010 и 011) происходит сразу после того, как данные записаны
процессором. В состоянии 010 выводится старший байт, а в состоянии 011
-  младший  байт.  Переходы  типа  010-011-010 происходят тогда, когда
счетчик периода уменьшается до 1. На этих  переходах  счетчик  периода
перезагружается.  Пока  отклик  на  прерывание  приходит от процессора
вовремя, механизм остается в основном цикле. При нарушении  происходит
переход  в  неактивное  состояние.  Прерывания  генерируются на каждом
переходе после передачи слова (011010).

Во  время  операции,  управляемой  DMA,  как  только  DMA  включается,
происходит  переход  в  состояние  001  и  посылаются запросы DMA чипу
Agnus. Из-за конвейерной обработки данных в Agnus, первое слово данных
должно  быть  отброшено.  Как  только  это слово прибывает, происходит
переход в состояние 101; а запрос на следующее слово данных уже вышел.
Когда   данные   прибывают,  происходит  переход  в  состояние  010  и
начинается главный цикл, продолжающийся  до  выключения  DMA.  Счетчик
длины уменьшается с приходом каждого слова. Когда длина заканчивается,
Agnus посылается запрос на рестарт, наряду с периодичным запросом DMA.
Этот  запрос  указывает  Agnus  сбросить  указатель  на начало таблицы
данных. Кроме этого, перегружается счетчик длины и вскоре после  того,
как  счетчик  длины становится равным 1 выдается запрос на прерывание.
Это случается сразу после того, как начанается вывод последнего  слова
данных.

Запросы DMA и запросы рестарта передаются Agnus  один  раз  на  каждую
горизонтальную  строку,  и данные возвращается приблизительно через 14
циклов (продолжительность цикла - 280ns).

В режиме объединения, все  происходит  немного  по-другому.  В  режиме
модуляции громкости, запросы приходят также, как и в нормальном режиме
(на переходе 011010). В режиме модуляции частоты,  запросы  происходят
на  переходе O10011. В режиме модуляции и громкости и частоты, запросы
происходят на переходах в обе стороны.

Если скорость семплирования  установлена  выше  нормального  максимума
(приблизительно  29  KHz),  в  буферонм регистре будут повторяться два
семпла. Если фильтр  выключен  и  установлена  максимальная  громкость
($40),  эта  особенность  может  использоваться для полученияносителей
модуляции частотой до 1.79 MHz. Модуляция помещается в карту памяти, с
положинельными  значениями в четных байтах и отрицательными значениями
в нечетных байтах.

Символы используемые в  диаграмме  состояния  объяснены  ниже.  Имена,
записанные  в  верхмем  регистре  указывают на внешние сигналы, имена,
записанные в нижнем регистре указывают на локальные сигналы.

AUDxON     DMA на канале "x" (сигнал из DMACON).

AUDxIP     Ожидание звукового прерывания (ввод из прерывания).

AUDxIR     Запрос на аудио прерывание (вывод из канала для прерывания)

Intreq1    Запрос на Прерывание который  объединяясь с intreq2,
           формирует AUDxIR

Intreq2    Подготовка к запросу на прерывание.  Запрос  приходит после
           следующего перехода 011->010 в течение нормальной операции.

AUDxDAT    Сигнал загрузки аудио данных. Загружает  16  бит  данных  в
           аудио канал.

AUDxDR     Запрос к Agnus от аудио DMA на одно слово данных.

AUDxDSR    Запрос к Agnus от аудио DMA на сброс  указателя  на  начало
           блока.

Dmasen     Разрешение запроса на рестарт.

Percntrld  Перезагрузка  счетчика  периода  из  резервной копии обычно
           производится записью процессором значения по адресу AUDxPER
           (может происходить и в режиме объединения)

Percount   Счетчик периода

Perfin     Счетчик периода завершился (значение = 1).

Lencntrld  Перезагрузка счетчика длины из резервной копии.

Lencount   Счетчик длины уменьшился на 1.

Lenfin     Счетчик длины закончил (значение = 1).

Volcntrld  Перезагрузка счетчика громкости из резервной копии.

Pbufld1    Загрузка выходного буфера записью AUDxDAT.

Pbufld2    То-же, что и pbufld1, но только во время перехода 010 ->011

AUDxAV     Модуляция громкости. Посылает данные на  регистр  громкости
           следующего канала вместо  D -> A конвертера.

AUDxAP     Модуляция  периода.  Посылает  данные  на  регистр  периода
           следующего канала вместо D -> A конвертера

Penhi      Разрешение  прохода  старшим  8  битам  данных   к   D -> A
           конвертеру

Napnav     /AUDxAV * /AUDxAP + AUDxAV   -    нормальный   режим   (без
           объединения).  Условие  нормальной работы DMA и запросов на
           прерывания.

Sq2,1,0    Имя состояния триггеров, MSB и LSB.



             РИСУНОК 5-8: Диаграмма аудио состояний
Конец.

 


НОМЕ




Rambler's Top100