Системное программное обеспечение персональных ЭВМ

Генерация звука


6.1. Генерация звука

Если динамик ПЭВМ включен и управляется от таймера, то высота генерируемого звука определяется частотой импульсов канала 2 и зависит от коэффициента деления, записанного в счетчике канала. Включение-выключение динамика управляется двумя разрядами в однобайтном регистре контроллера программируемого периферийного интерфейса, доступ к которому - через порт 0x61. Следует иметь в виду, что этот регистр используется также и для других целей, так что при его программировании следует вначале прочитать его содержимое, изменить требуемые разряды, а затем записать в порт 0x61 новое значение. Для управления динамиком используются такие разряды регистра:

0- единица в этом разряде устанавливает управление динамиком от таймера (возможно и прямое управление из программы, но мы его не рассматриваем);
1- включение/выключение (1/0) динамика.

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

Для нот первой октавы (включая полутона) ряд коэффициентов деления следующий:

912 - 861 - 813 - 767 - 724 - 678 - 645 - 609 - 574 - 542 - 512 - 483

Для перехода на октаву ниже следует умножить члены этого ряда на 2, на октаву выше - на 0,5.

Следующая программа воспроизводит 7 основных нот первой октавы (пример 6.1).

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



Содержание раздела