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: Диаграмма аудио состояний Конец. |