Техника - молодёжи 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 |