Глава 2. Таймеры и звук.

Раздел 2. Создание звука.

2.2.7 Создание плавного перехода тонов.

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

Hизкий уровень.

Проще всего использовать метод генерации звука, управляемый микросхемой интерфейса с периферией 8255. Просто меняйте значение бита 1 порта B между 0 и 1, используя для отсчета времени пустой цикл, как показано в {2.2.2}. При начале каждого нового пустого цикла, засчет засылки значения в CX, слегка изменяйте это значение. Здесь тон повышается:
;---запрет микросхемы таймера
PB EQU 61H ;адрес порта B микросхемы 8255
IN AL,PB ;получаем из него байт
OR AL,1 ;сбрасываем бит 0
OUT PB,AL ;возвращаем байт в порт
;---установка частоты и длительности звука
MOV BX,9000 ;начальное значение счетчика
MOV DX,3000 ;длительность звука 3000 циклов
REPEAT: ;сюда возвращаемся после цикла
;---установка бита динамика
OR AL,00000010B ;устанавливаем бит 1
OUT PB,AL ;посылаем байт в порт B
MOV CX,BX ;установка счетчика для 1/2 цикла
CYCLE1: LOOP CYCLE1 ;пустой цикл на 1000 повторов
;---сброс бита динамика
AND AL,11111101B ;сбрасываем бит 1
OUT PB,AL ;посылаем байт в порт
MOV CX,BX ;установка счетчика
CYCLE2: LOOP CYCLE2 ;пустой цикл
;---переход к следующему циклу
DEC BX ;увеличиваем частоту, уменьшая
DEC BX ;счетчик
DEC DX ;уменьшаем оставшуюся длительность
JNZ REPEAT ;если DX не 0, то новый цикл
Этот простой метод приводит к тому, что высокие тона проходят значительно быстрее, чем низкие. Для коротких интервалов такой эффект может быть желательным, а когда он не нужен, надо добавить код, который при повышении тона пересылает в DX большие значения на следующем цикле.


<~-2.2.6 Генерация строки тонов, одновременно с другими операциями.
Содержание
2.2.8 Создание звуковых эффектов.-~>

Сайт управляется системой uCoz