Техника - молодёжи 1995-02, страница 26

Техника - молодёжи 1995-02, страница 26

Существуют три подхода к проблеме генерации звука в ЭВМ. Первый, наиболее простой с аппаратной точки зрения, предполагает создание звуковых колебаний с помощью центрального процессора (ЦП), который использует порт вывода для задания текущей амплитуды сигнала, подаваемого на внешний динамик (к примеру, запись 0, а затем 1 в соответствующий бит такого порта перемещает диффузор динамика из одного крайнего положения в другое, что и порождает звуковую волну).

Очевидный недостаток такой схемы — высокая степень загруженности ЦП в программах с музыкальным сопровождением, имитацией речи и другими звуковыми эффектами (скажем, в тех же играх), что усложняет их и замедляет исполнение.

Второй вариант позволяет значительно снизить роль ЦП в генерации звука. Он заключается в перепоручении "неинтеллектуальной" работы по созданию элементарных колебаний специальным электронным схемам — тоновым генераторам (ТГ), а ЦП используется лишь для изменения параметров этих колебаний (амплитуды, частоты, стиля), что требуется значительно реже. Возможность работы по первому варианту при этом сохраняется.

И наконец, третий вариант предполагает использование мощных звуковых процессоров, имеющих собственную память и способных работать независимо от ЦП.

С точки зрения оптимизации коэффициента эффективность/стоимость наиболее приемлем для бытовых ПК второй вариант. Применяется он и в компьютере "Энтерпрайз".

Аудиосистема этого ПК включает три ТГ, генерирующих колебания в диапазоне 8 октав для двух каналов с 32 уровнями амплитуды в каждом, что позволяет создавать стереоэффект; а также генератор шума. Кроме того, в распоряжении пользователя имеются различные звуковые эффекты (фильтры, ring modulation и другие).

По просьбам пользователей ПК "Энтерпрайз" приводим программу трехголосого музыкального синтезатора с одновременным доступом к четырем октавам, использующую аппаратное чтение клавиатуры. Для выбора октав и типа инструмента служит встроенный джойстик, а для изменения стиля — функциональные клавиши F1 и F2.

100 ALLOCATE 136

110 CODET=HEX$("27,00,29,2C,2A,2E,00,00") 120 CODE =HEX$("0F,39,11,14,12,16,39,39") 130 CODE =HEX$("39,31,38,32,39,37,30,18") 140 CODE =HEX$("0E,00,10,13,39,15,17,00") 150 CODE=HEX$r26,00,28,2B,39,2D,2F,00") 160 CODE =HEX$("39,39,39,39,39,39,34,33") 170 CODE =HEX$("39,1A,23,1 F,21,39") 180 CODE =HEX$("25,1B,24,20,22,1E, 1D, 19") 190 CODE =НЕХ$("39,02,0В,07,09,39}04,39") 200 CODE=HEX$(m03,0C,08,0A,06,05,0r) 210 CODE L=" " 220 CODE P=" "

230 CODE E=HEX$("21")&WORD$(P)&HEX$("D9, 16,03,21")&WORD$(T)&HEX$("OE,OA,79, 3D,D3,B5,DB,B5,06,08,1F,38,0A,5F,7E, 09,77,23,09,15,28,07,76,23,10,F0,0D, 20,E5)3E,02,92,38,DB,21")&WORD$(L) &HEX$("77,23,6E,26,00,C9") 240 ENVELOPE NUMBER 1 ;0,63,63,1 ;0,0,0,9;

RELEASER,-20,-20,10;0,-43,-43,125 250 ENVELOPE NUMBER 2;0,63,63,15;0,0,0,15;

RELEASER,-10,-10,50;0,-43,-43,70 260 ENVELOPE NUMBER 3;0,63,63,1 ;0,-30,

H

L

КОМПЬЮТЕР

С ХОРОШО

по-

СТАВЛЕННЫМ ГОЛОСОМ

Александр ГУСЕВ

-30,9; RELEASER,-20,-20,10;0,-15,-15,115 270 ENVELOPE NUMBER 4;0,63,63,45;0,0,0,45; RELEASER,-10,-10,10;0,-43,-43,60 280 ENVELOPE NUMBER 5;0,63,63,35;0,

-45,-45,1; RELEASER-10,-10,10;0,-18,-18,104 290 ENVELOPE NUMBER 6;0,63,63,1;0,0,0,149 300 ENVELOPE NUMBER 7;20,63,63,25;

-20,-63,-63,135 310 ENVELOPE NUMBER 8;0,63,63,1;6,-10, -10,49; RELEASE;-3,-20,-20,10;-3,-15,-15,85 320 LET 0=24:LET S=0:LET V=3:TEXT 40:

SET SPEAKER ON:SET KEY CLICK OFF 330 PRINT "Octave 2 Style 0 Envelope 3" 340 PRINT AT 7,0:" 1 2 4 5 6 8 9 — " ERASE"

350 PRINT " TAB QWERTYUIOP@[ ENTER"

360 PRINT " LOCK ADFGJK + *]" 370 PRINT " SHL \ Z X С V В N M , ,/SHR

ALT" 380 DO

390 SELECT CASE USR(E,0) 400 CASE 49

410 LET 0=0+12*(0>0):PRINT AT

1,7:0/12 420 CASE 50

430 LET 0=0-12*(0<72):PRINT AT 1,7:0/12 440 CASE 51

450 LET S=S+16*(S>0):PRINT AT 1,15:S " " 460 CASE 52

470 LET S=S-16*(S<240):PRINT AT 1,15:S " " 480 CASE 55

490 LETV=V+1*(V>1):PRINT AT 1,29:V 500 CASE 56

510 LET V=V-1*(V<8):PRINT AT 1,29:V

520 CASE 57

530 CLEAR SOUND

540 CASE ELSE

550 FOR C=0 TO PEEK(L)

560 SOUND PITCH PEEK(P+C)+0,SOURCE C,

STYLE S,ENVELOPE V,INTERRUPT 570 NEXT 580 END SELECT 590 LOOP 600 END

Карта портов ввода/вывода компьютера "Энтерпрайз"

(окончание. Начало см. в "ТМ" №1 за этот год)

Условные обозначения: R — чтение из порта, W — запись в порт, ТГ — тоновый генератор.

Порт Биты Назначение

RB4H 7,5,3,1 1 =ловушки источников прерываний 4,3,2,1 соответственно установлены, 0=сброшены 6,4,2,0 1=генерация источником прямоугольной волны частотой f/2

WB4H 7,5,3,1 1=сброс соответствующих ловушек 0=состояние ловушки не меняется 6,4,2,0 1 ^включение прерывания от соответствующего источника 0=выклю-чение

RB5H 7..О

WB5H

RB6H

WB6H WB7H

В8Н.. ..ВЕН

WBFH

СОН.. ..FFH

состояние группы клавиш (0=нажата)

Номер группы: 01 23456789

SHL CTRTAB ESCFN1...... ALT IN?

Z A W 2 FN2ERA] ENTSF S E 3 FN7n : LEF SHR [ FN50 L HOL. P FN6 - ; UP / @ FN39 К RIG, 0

FN8......DCWDEL-

FN48 J ST0M I

X V С В

\ UOCQ 1 N H U 7

E 3 T 5 R 4 Y 6

7 1=REM2 ON, 0=OFF

6 1=REM1 ON.O=OFF

5 0=TAPE SOUND ON, 1=0FF

4 не используется

3..0 номер группы клавиш/ контакта внешних джойстиков

7 Обналичив сигнала на входе ТАРЕ IN

6 0=уровень сигнала на входе ТАРЕ IN достаточный, 1 недостаточный

5. .4 1 =высокий уровень на входе SERIAL/NET

3 0=принтер готов, 1=не готов

2. .0 0=контакт входов CONTROL-1, -2 замкнут (данные для KEMPSTON-джой-стика):

Номер контакта

О CONTROL-1:0 1 2 3 C0NTR0L-2:5 6 7 8 FIRE UP DOWN LEF RIGHT

7..0 параллельный порт (PRINTER)

7..2 не используется 1..0 последовательный порт (SERIAL/NET)

7..О не используются

7. .4 не используются 3..2 00=процессор ждет доступа ко всей памяти

01= — // — только прихода опкода 10,11=состояние ожидания отсутствует

1 0=DAVE работает от генератора 12 МГц 1=8 МГц О 0=работа с памятью 64К 1=16К

7..О не используются

Примечание.

Напомним, что источником прерываний 1 является аудиопроцессор DAVE, генерирующий частоты 1 КГц/50Гц/ТГ1 /ТГ2; 2 — генератор частоты 1 Гц; 3 — видеопроцессор NICK; 4 — вход SERIAL/NET. ■

ТЕХНИКА-МОЛОДЕЖИ 2'9 5

24