Программное управление звуком. Управление звуком с гарнитуры (Android). Что мы имеем

На некоторых сайтах, созданных на основе Flash-технологии, имеется возможность управления звуком. Например, звук можно выключить в процессе проигрывания мультфильма, изменить громкость, а на некоторых сайтах можно даже регулировать звуковой баланс. Сначала рассмотрим общие сведения, а затем перейдем к примеру.
Объект Sound

Для работы со звуком достаточно воспользоваться объектом класса Sound (Звук) и его методами. Сначала определяется объект с помощью следующей конструкции:
Mysound =new Sound О;
Здесь Mysound - имя, назначаемое объекту класса Sound. Теперь можно управлять звуком, присоединяя через точку к имени объекта имена методов и указывая
необходимые параметры. Ниже перечислены основные методы объекта Sound:

  • attachSound ("имя_звука") -присоединяет к мультфильму звуковой файл из библиотеки;
  • getPan () - возвращает последнее значение баланса в интервале от -100 до 100. Левому динамику соответствует отрицательное значение, правому - положительное. Значение 0 представляет равномерное распределение силы звука междудинамиками;
  • getVolume ()- возвращает уровень громкости в интервале от 0 до 100;
  • setPan () - устанавливает баланс между левым и правым динамиком. Значения от -100 до -1 соответствуют большей громкости левого динамика, а от 1 до 100 - правого;
  • setVolume () - устанавливает громкость в интервале от 0 до 100. Значением по умолчанию является 100;
  • start (задержка, количество_повторений) - начинает воспроизведение звукового файла.Необязательные параметры позволяют задать время задержки в секундах и количество повторений воспроизведения;
  • stop () - приостанавливает воспроизведение звукового файла. Параметров нет;

Кроме перечисленных выше, имеется еще один метод объекта Sound - setTransform. Синтаксис его использования другой. Для вызова метода setTransform необходимо указать объект класса Object, связанный с параметрами управления динамиками. После этого создается объект класса Sound, который будет обрабатывать значения этих параметров с помощью метода setTransform. Параметры, о которых идет речь, определяют уровень входного сигнала в процентах (в интервале от-100 до 100):

  • l l-уровень воспроизведения в левом динамике сигнала, поступающего с левого входа;
  • 1 r- уровень воспроизведения в левом динамике сигнала, поступающего с
    правого входа;
  • r r - уровень воспроизведения в правом динамике сигнала, поступающего
    с правого входа;
  • r l- уровень воспроизведения в правом динамике сигнала, поступающего c левого входа.

По умолчанию параметры ll и rr имеют значение 100, а параметры 1r и rl - значение 0. процедура настройки параметров звука с помощью метода setTransform выглядит следующим образом:
Mytransform = ne Object () ;
Mytransform.il = 100;
Mytransform.Ir = 0;
Mytransform.rr = 100;
Mytransform.rl = 0;
MySound = new Sound ();
MySound.setTransform (Mytransform};

Задавая другие комбинации параметров звука, можно получать интересные эффекты.

Пример элемента управления звуком

Теперь рассмотрим пример создания элемента управления звуком. В новом мультфильме определим три слоя. Первый, самый верхний, назовем action, второй - volume и третий - pan . У нас должно получиться, как показано на рисунке:

Рис. 630. Создание слоев action, volume и pan в мультфильме
В слой action поместим такое действие:

zvuk = new Sound();
zvuk.attachSound("zvuk") ;
zvuk.start(0, 999999);

Этим создаётся новый звуковой объект. Присоединяем его из библиотеки с именем zvuk и запускаем с позиции 0, устанавливая количество повторений 99 999 раз (т. е. практически бесконечно). Если сейчас запустить мультфильм, то мы ничего не увидим и не услышим. Чтобы что-нибудь услышать, надо дать звуку имя. Для этого откроем библиотеку и найдем в ней наш звуковой символ. Неважно, как он там сейчас называется. Чтобы назвать звук, следует щелкнуть на его имени правой кнопкой мыши и в контекстном меню выбрать команду Linkage (). В раскрывшемся окне выберем переключатель Export this symbol и зададим имя zvuk . Иначе говоря, сделаем так, как показано на рисунке:

Рис. 632. Задание координат и размеров шкалы громкости звука

Теперь создадим в этом символе новый слой и поместим туда polzunok_MC_volume . Слой с ползунком должен быть выше слоя со шкалой. Поставим ползунок в центре шкалы и назначим ему такое действие:
onClipEvent (enterFrame) {
root.zvuk.setVolume(this. x) ;

Этим мы добьёмся того, что звук будет иметь значение, соответствующее координате х ползунка. Теперь переходим на главную сцену и вставляем туда символ shkala_volume . Вот мы и создали элемент управления громкостью звука.
Теперь организуем балансировку звука между левым и правым динамиками. Для этого создадим символ-кнопку с названием polzunok_pan и нарисуем там ползунок, затем создадим символ типа Movie Clip с именем polzunok_MC_pan поместим туда наш polzunok_pan . Зададим ему действие:
on (press) {
startDrag (this, false, on (release) { stopDrag ();
-100, 0, 100, 0) ;
}

Теперь создадим ещё один символ типа Movie Clip с именем shkala_pan . Нарисуем там нашу шкалу в виде прямоугольника с параметрами, как показано на рисунке:

Рис. 633. Задание координат и размеров шкалы балансировки звука

В этом же символе создадим ещё один слой и поместим его выше текущего. В этом слое расположим ползунок polzunok_MC_pan и зададим для него следующее действие:

OnClipEvent (enterFrame)
(root.zvuk.setPan(this. x) ;

Теперь переходим на главную сцену и вставляем в неё шкалу балансировки звука shkala_pan . Посмотрите мультфильм и попробуйте изменить положение ползунков. Если ошибок нет, то всё будет работать.

Однако у нас нет цифрового отображения громкости и баланса звука. Давайте разработаем и такой сервис. На главную сцену вставим два динамических текстовых поля. Одно для отображения громкости, другое -для баланса. Назовем их vol и pan соответственно. Сначала займёмся полем vol.
Выделим символ shkala_volume и откроем палитру Action для нашего ползунка. Добавим к уже имеющемуся следующий код:
s = new Sound(zvuk);
_root.vol = s.getVolume();
Таким образом, у нас должно получиться следующее:
onClipEvent (enterFrame) {
в Flash
root . zvuk . set Volume (this. _x) ; ^ = new Sound (zvuk) ; root.vol = s . getVolume () ;
}

Теперь пользователь может видеть цифровое значение громкости звука. Займемся организацией цифрового отображения баланса. Для этого перейдем к символу shkala_pan и добавим к его действиям следующий код:
s = new Sound (zvuk) ;
root. pan = s. getPan (); В результате должно получиться: onClipEvent (enterFrame) {
root. zvuk. set Pan (this -_x) ; s = new Sound(zvuk);
root. pan = s.getPan(); }

Теперь пользователь получает сведения относительно баланса звука. Однако когда ползунок переходит на левую часть шкалы, мы видим отрицательные числа. Обычно в подобных программах отображаются положительные числа и буква «L» или «R». Давайте попробуем сделать так же. Для этого в символе shkala_pan в палитре Actions для ползунка немного изменим существующий код. После замены должно получиться:
onClipEvent (enterFrame) (_root . zvuk . setPan (this ._x) ; s = new Sound (zvuk) ;
if (this._x<0) (
_root.pan = - (s .getPan ()) +"Left" ; } else if (this._x>0) { _root.pan = s . getPan () +"Right" ; } else if (this._x = = 0) (_root.pan = s. getPan ();

Здесь мы поставили условие, что если значение координаты х ползунка меньше нуля (т. е. баланс смещается влево), то в поле pan возвращается значение с минусом (отрицательное число с минусом есть положительное число). Кроме того, к Цифровому значению приписывается строка Left . А если баланс смещается вправо, то всё остаётся как есть и ещё приписывается Right . Если же значение координаты х равно нулю, то вообще ничего не приписывается. Теперь мы имеем более привычную форму отображения баланса. Таким же способом можно сделать, чтобы при минимальной громкости выводилось бы, например «OFF» или «Выкл.», а при максимальном значении - «МАХ». Для этого нужно лишь заменить код для ползунка в символе shkala_volume на следующий:
_root . zvuk. set Volume (this. _x) ;
s = new Sound (zvuk) ;
if (this._x == 0) {
root.vol = "Выкл."; Т
else if (this._x == 100) { _root.vol = "MAX"; Т
else { _root.vol = s.getVolume ();

Если ваш компьютер работает на OC Windows XP, Vista или 7, а также оснащен аудиочипом от Realtek, то для работы звука вам необходимо иметь специальный драйвер. Для его активации наберите «Realtek» в поиске Пуска. Когда вы найдете в результатах Диспетчер Realtek HD - запустите его. Если этой программы нет в поиске, то на компьютере отсутствует этот драйвер либо установлена слишком старая версия. В этой статье будет написано, как произвести установку и настройку драйвера Realtek.

Установка драйвера Realtek

Следуйте этой пошаговой инструкции, если на компьютере отсутствует драйвер либо он устарел.

  1. Загрузите актуальную версию необходимого драйвера с сайта Realtek либо либо с нашего сайта по следующей ссылке: .
  2. Начините установку, запустив скачаный файл в формате «.exe».
  3. Для продолжения установки нажимайте «Далее».

    Внимание: если при установке будет предупреждение, что Windows не знает об издателе драйвера, то просто нажмите на «Установить», для продолжения работы установщика.

  4. После установки драйвера перезагрузите компьютер, чтобы все изменения начали свою работу.
    Сигналом о правильной установки программного обеспечения будет знак Realtek HD Audio Manager на панели задач. Чтобы перейти в диспетчер Realtek просто кликните на знак два раза.

Функции и настройки Realtek High Definition Audio

Аудикодек Realtek поддерживает 8-канальное аудио, Jack-Sensing, а также обладает множеством других функций. Кроме того он успешно работает с Universal Audio Jack, благодаря чему можно легко устранять ошибки связанные с кабельным соединением.

Аудио Менеджер Realtek поддерживает системные платы, которые работают с аудиобработчиком от Realtek.

Примечание: все меню указаны ниже для справки и их названия могут сильно отличаться от того, что будет находиться на вашем компьютере. В среде обозначенных выше версий Windows, Диспетчер Realtek HD будет сам находить устройства, подключенные к портам. И в зависимости от них уже будут показаны вкладки с настройками. Также интерфейс программы может отличаться из-за версии драйвера либо модели установленной на вашем компьютере звуковой карты.

Например:

Меню «Динамики»

Сначала перед вами откроется ползунок для регулировки громкости всех устройств. В панели, расположенной справа будут располагаться параметры, связанные с работой аудиоустройств вывода.

Цифровой выход

Для настройки входа цифрового звука сделайте следующее:

  1. Во вкладке «Дополнительные настройки устройства» можно настраивать параметры разделения входных гнезд.
  2. После вам станут доступны еще четыре вложенных меню.

Для настройки акустических систем:

1. Выберите меню «Динамики».
2. Для установки аналогового порта вывода как устройства по умолчанию нажмите на «Задать стандартное устройство».
3. Выберите меню «Конфигурация динамиков», расположенною в «Динамики». Там будут находиться параметры конфигурации. Также там можно настроить объемный звук и указать конфигурацию динамиков.

4. В меню «Звуковой эффект» можно настроить караоке, выбрать окружающую вас обстановку, а также выбрать один из нескольких режимов для эквалайзера.

5. Для регулирования громкоговорителей необходимо перейти в меню «Поправка на помещение». Там можно регулировать расстояние и углы, исходя от вашего расположения. Это очень полезная функция пригодится тогда, когда вы находитесь не прямо перед колонками, а стоите в несимметричной позиции от них. Но ее работа возможно только в режимах 5.1 и 7.1.
6. Меню «Стандартный формат» отвечает за параметры микшера. А если конкретно, то за частоту дискретизации и разрядность, с которой ОС будет обрабатывать исходящие звуки.

Настройка микрофона

Настроить свой микрофон можно в последнем меню, которое так и называется — «Микрофон». Вверху будут находиться ползунки для настройки громкости и баланса микрофона. Регулируйте их, пока не добьетесь желаемой громкости.

Этот раздел делится на две вкладки: «Эффект микрофона» и «стандартный формат».

Во вкладке «Эффект микрофона» можно изменить параметры конференц-режима, а также включить режим подавления эхо и шума.

Меню «Информация»

Нажав на значок информации, который выглядит как буква «i», можно узнать версию программы, аудиоконтроллер, DirectX, кодек и выбрать язык программы.

Спасибо за внимание! Пишите ваши уточнения по настройке Realtek High Definition Audio. 🙂

Управление звуком 0 out of 5 0 based on 0 voters.



  • < Назад
  • Вперёд >

Управление звуком

Управление звуком 0 out of 5 0 based on 0 voters.



После того как вы, насколько смогли, защитили помещение от внешнего мира, вам следует разобраться, как звук распространяется внутри самого помещения.

Звук распространяется в воздухе в виде волн. Эти волны отражаются от стен комнаты и вызывают такие эффекты, как реверберация и эхо. Одним из проклятий домашних студий является то, что они, как правило, имеют очень маленькие размеры. Так как звук распространяется достаточно быстро (со скоростью около 330 м/с), то когда вы сидите около акустических систем и слушаете музыку, вы в равной степени слышите звук, исходящий от колонок, и звук, отраженный от стен. В больших помещениях исходный и отраженный звук вы слышите раздельно, что уменьшает проблемы. В хорошей студии нужно "укротить" эти отражения, чтобы они не мешали слышать чистый звук, исходящий из акустических систем.

Описать все отражения, происходящие в комнате, довольно трудно. Почитайте книги по акустике (науке о распространении звуков), и вы узнаете, что существуют разные моды резонанса: аксиальные (одно измерение), тангенциальные (два измерения) и косые (три измерения). Каждая из мод связана с определенным способом распространения и взаимодействия звуковых волн в помещении. Знание мод своего помещения может помочь с выбором стратегии работы с акустикой. Однако формулы, служащие для вычисления мод, действительно очень сложные, особенно для тангенциальных и косых.

Вы можете более подробно узнать о модах резонанса помещения и даже найти калькуляторы мод в Internet, задав в любимой поисковой системе словосочетание “моды резонанса”. Вам будет предложено всего несколько ссылок, с которых вы и сможете начать изучение данного вопроса. Изучите его самостоятельно, так как подробное его рассмотрение достойно целой книги.

Итак, рискуя быть преданным анафеме профессиональными инженерами-акустиками всего мира, я все же поделюсь с вами некоторыми хитростями, которые я использовал в своих студиях. Моей главной целью было создание комнаты с тем звучанием, которое нравится лично мне, и достаточным уровнем контроля над отражениями. Я, как и многие, записывал и микшировал в одной и той же комнате, что давало возможность выполнять по ходу небольшие корректировки для того, чтобы звук больше напоминал то, к чему я стремился.

Существуют два момента, при которых звучание играет очень важную роль, - собственно записывание и микширование. Каждый из этих процессов требует особого подхода, чтобы запись имела наилучшее из возможных звучание. Оба эти процесса мы рассмотрим в настоящем разделе.

Возможно, путешествуя по безграничным просторам Всемирной паутины, Вы замечали на некоторых Flash-сайтах возможность управления звуком (например, его можно выключить в процессе проигрывания клипа или изменить его громкость, а некоторых сайтах можно даже регулировать его баланс). Если у Вас есть желание и достаточно терпения, давайте попробуем сделать такое управление звуком.
Для того, чтобы создать этот эффект нам понадобится сам звук и собственно программа Flash 5 (именно пятая версия, поскольку пример написан именно в ней).
Создайте новый клип, а в нём три слоя. Первый (здесь и далее слои будут перечисляться сверху вниз т.е. самый верхний - первый, ниже - второй и. т. д.) назовите "action", второй - "vol" и третий - "pan". У Вас должно получиться что-то вроде этого:

В слой "action" поместите такой action:

zvuk = new Sound();
zvuk.attachSound("zvuk");
zvuk.start(0, 999999);
_
Этим Вы создаёте новый звуковой объект, присоединяем его из библиотеки с именем "zvuk" и запускаем с позиции 0 и повторением 99999 раз т.е. практически бесконечно:Если Вы сейчас запустите клип, то ничего не увидите и не услышите. Чтобы Вы могли что-нибудь услышать Ваш звук, надо дать ему имя для этого откройте библиотеку и найдите там Ваш звук. Неважно как он там называется сейчас, это не имеет никакого значения, чтобы реально назвать звук, Вам следует нажать на его имя правой кнопкой мыши и из контекстного меню выбрать пункт "Linkage" в этом окне выберите пункт "Export this symbol" и задайте имя "zvuk". В общем сделайте всё как показано на рисунке.

Теперь если Вы посмотрите клип, то услышите Ваш звук.
Итак, почти половина работы уже сделана, осталось только организовать управление этим звуком. Для решения этой задачи существует множество способов. Мы сделаем по самому, на мой взгляд, распространенному методу, методу "ползунка" т.к. этот метод применяется во многих музыкальных проигрывателях (например, в WinAmp-е).
Создайте новый символ - кнопку и назовите её "polzunok_vol" эта кнопка будет регулятором громкости. Создайте ещё один символ типа Movie Clip, с названием "Polzunok_MC_vol", поместите туда из библиотеки символ "polzunok_vol" и задайте ему такой action:
____________________________
on (press) {
startDrag (this, false, 0, 7, 100, 7);
}
on (release) {
stopDrag ();
}
___

Затем создайте ещё один символ типа Movie Clip и назовите его "shkala_vol" в этом символе нарисуйте прямоугольник, по которому будет ездить наш ползунок. Для правильной работы задайте ему координаты как показано на рисунке

Теперь создайте в этом символе новый слой и поместите туда "polzunok_MC_vol", слой с ползунком должен быть выше слоя со шкалой, поставьте ползунок по центру шкалы и назначьте ему такой action:

onClipEvent (enterFrame) {

}
__________________________________
Этим мы добьёмся того, что звук будет иметь такое же значение эквивалентное значению "Х" ползунка а поскольку он ползает от 0 до 100 вдоль координаты "Х", то значение звука будет соответствующим. Теперь переходите на главную сцену и вставляйте туда символ "shkala_vol". Вот мы и имеем у себя управление громкостью звука.

Теперь организуем балансировку звука между левым и правым динамиками.
Для этого создадим символ - кнопку с названием "polzunok_pan" и нарисуем там ползунок, затем создадим символ Movie Clip с именем "polzunok_MC_pan" и поместим туда наш "polzunok_pan". Зададим ему action:
_____________________________________
on (press) {
startDrag (this, false, -100, 0, 100, 0);
}
on (release) {
stopDrag ();
}
_____________________________________

Теперь создадим ещё один символ - Movie Clip с именем "shkala_pan"
И нарисуем там нашу шкалу в виде прямоугольника с параметрами в точности как показано на рисунке.

В этом же символе создайте ещё один слой и поместите его выше текущего. В этот слой поместите наш ползунок "polzunok_MC_pan" и задайте ему следующий action:
_________________________________

onClipEvent (enterFrame) {
_root.zvuk.setPan(this._x);
}
________________________________

Теперь переходите на главную сцену и вставляйте в неё "shkala_pan".
Посмотрите клип и попробуйте всё потаскать, если всё было сделано правильно, всё будет работать.

Но, как Вы, наверно сами видите, здесь есть небольшие недостатки. Например пользователь не видит цифрового отображения громкости звука или баланса: Давайте предоставим ему такой сервис.

На главную сцену вставьте два динамических текстовых поля. Одно для отображения громкости, другое для баланса. Назовите их "vol" и "pan" соответственно. Сначала займёмся полем "vol".
Переходите в символ "shkala_vol" и там откройте окно action для нашего ползунка и добавьте туда следующий код к уже имеющемуся там коду
_________________________________
s = new Sound(zvuk);
_root.vol = s.getVolume();
________________________________

и того у Вас должно получиться:
___________________________________
onClipEvent (enterFrame) {
_root.zvuk.setVolume(this._x);
s = new Sound(zvuk);
_root.vol = s.getVolume();
}
___________________________________

Теперь пользователь может видеть цифровое значение громкости звука. Передём к организации цифрового отображения баланса. Переходите к символу "shkala_pan" и там добавьте следующий код:
_____________________________________
s = new Sound(zvuk);
_root.pan = s.getPan();
_____________________________________

В итоге должно получиться:
________________________________
onClipEvent (enterFrame) {
_root.zvuk.setPan(this._x);
s = new Sound(zvuk);
_root.pan = s.getPan();
}
_______________________________

Теперь пользователь получает сведения относительно баланса звука. Вот вроде бы и всё, но при просмотре клипа бросается в глаза одна деталь, а именно: кому понравиться, что когда ползунок переходит на левую часть шкалы, мы видим отрицательные числа: Обычно в подобных программах отображаются положительные числа и буква "L" или "R". Давайте попробуем сделать так же. Для этого в символе "shkala_pan" в окне actions для ползунка добавим, точнее лучше заменим существующий код. После замены должно получиться:

__
onClipEvent (enterFrame) {
_root.zvuk.setPan(this._x);
s = new Sound(zvuk);
if (this._x<0) {
_root.pan = -(s.getPan())+"Left";
} else if (this._x>0) {
_root.pan = s.getPan()+"Right";
} else if (this._x = = 0) {
_root.pan = s.getPan();
}
}
_____________________________________________

Немного поясню получившееся. Мы поставили условие, что если значение "Х" ползунка меньше нуля (т.е. баланс смещается влево), то в поле "pan" возвращается значение с минусом (а минус на минус даёт плюс) и помимо этого приписывается строка Left. Ну а если баланс смещается влево, то всё остаётся как есть и ещё приписывается "Right". Ну а если "Х" координата равна нулю, то вообще ничего не приписывается. Теперь мы имеем более привычную форму записи баланса. Таким же способом можно сделать так, чтобы когда громкость была минимальная, выводилось бы, например "OFF" , а при максимальном значении - "MAX". Для этого нужно лишь заменить код у ползунка в символе "shkala_vol" на следующий код:
________________________________________________
onClipEvent (enterFrame) {
_root.zvuk.setVolume(this._x);
s = new Sound(zvuk);
if (this._x == 0) {
_root.vol = "OFF";
} else if (this._x == 100) {
_root.vol = "MAX";
} else {
_root.vol = s.getVolume();
}
}
_____________________________________________

Теперь мы имеем все, что надо для нормального отображения звука и баланса.

Работу со звуком в модуле Crt обеспечивают две процедуры:

включение сигнала заданной частоты:

Sound(N:word)

отключения сигнала:

NoSound.

Процедура Sound генерирует звуковые сигналы частотой N,изменяющейся в пределах 37-32767 Гц. Громкость звука не регулируется, сигнал будет звучать до момента его выключения процедурой NoSound.

Для организации паузы в работе программы определена процедура, выполняющая задержку на заданное число миллисекунд:

Delay(N:word).

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

Uses Crt;

Sound(220); { включения звука с частотой 220}

Delay(300); { пауза на 0.3 сек }

NoSound; { отмена звука}

Используя процедуры Sound, Nosound, Delay оформите вывод на экран музыкального слова " К О Л О Б О К " . Вывод каждой буквы сопроводить звуковым сигналом частотой, соответствующей порядковому номеру символа в кодовой таблице (функция ORD),увеличенному в 100 раз. Время звучания каждой буквы 1 секунда.

Текстовые окна.

Window(x1,y1,x2,y2:byte);

Данная процедура определяет на экране текстовое окно с координатами верхнего левого угла экрана x1,y1, нижнего правого x2,y2. Максимальный размер окна определяется выбранным режимом. Режиму с 80 столбцами соответствует окно (1,1,80,25),режиму с 40 столбцами окно (1,1,40,25). Процедура Window помещает курсор в т.(1,1) установленного окна.

Многие процедуры и функции CRT работают относительно координат текущего окна, включая Window, ClrEol, ClrScr, DelLine , GotoXY , InsLine , WhereX , WhereY и все процедуры ввода/вывода. Координаты текущего окна хранятся соответственно в переменных WindMin и WindMax типа word, и отсчитываются отностительно точки с координатами (0,0), а не (1,1). Младший байт содержит значение координаты Х, а старший байт Y, поэтому координаты верхнего левого угла определяются выражениями:

x1:=Lo(WindMin),

y1:=Hi(WindMax),

координаты правого нижнего:

x2:=Lo(WindMax) ,

y2:=Hi(WindMax).

(* вывод на экран окон произвольного размера *)

(* различного цвета фона *)

Uses crt;

Var x,y:integer;

Randomize;

x:=random(MaxX);

y:=random(MaxY);

Window(x,y,x+random(10),y+random(8)); { определение }

TextbackGround(random(16)); { размера окна }

Delay(100);

ClrScr; { заполнеие фоном }

until KeyPressed;

Вывести изображение российского трехцветного флага в центре экрана размером 30*15. Каждая цветовая полоса задается текстовым окном (ширина 30 позиций, высота 5) и заполняется соответствующим цветом.

Использование клавиатуры.

Клавиатура - это основное средство ввода информации в ПЭВМ, поэтому гибкая обработка сигналов с клавиатуры является важным элементом создания эффективных программ.

В процессе работы с клавиатурой производится анализ кода нажатой клавиши, называемый кодом сканирования. Каждая из клавиш клавиатуры имеет свой уникальный код.

Сдандартная клавиатура имеет три типа клавиш:

символьные (буквы, цифры, знаки арифметических операций, знаки пунктуации и специальные ENTER, ESC, BACKSPACE, TAB);

управляющие (функциональные F1-F10, клавиши перемещения курсора, Alt+<другие клавиши>, Ctrl+<другие клавиши>, Shift+<другие влавиши>).;

сдвига (смена регистов Ctrl,Alt,Shift, фиксации регистров CapsLock,ScrollLock,NumLock, вспомогательные клавиши).

Символьные клавиши генеируют при нажатии код в виде одного значения.

Управляющие клавиши генерируют расширенный код сканирования, состоящий из двух значений. Первое является признаком управляющей клавиши, второе содержит код сканирования.

Клавиши сдвига имеют коды, которые не распознаются средствами Паскаля. Обработка кодов производится на системном уровне.

В модуле Crt определены две дополнительные функции управления клавиатурой: ReadKey и KeyPressed.

KeyPressed:boolean возвращает значение true если на клавиатуре была нажата клавиша, и false в противном случае. При этом введенные символы из буфера клавиатуры не удаляются. Данную функцию можно использовать для завершения цикла по нажатию любой клавиши.

Пример 1.

(* использование функции ReyPressed *)

Uses Crt;

(* заполнение экрана до нажатия любой из клавиш *)

Randomize;

GotoXY(Random(70),Random(50));

write("привет!");

delay(300)

Until KeyPressed;

Readkey:char.

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

Функция ReadKey считывает символ из буфера клавиатуры с одновременным его удалением из буфера или ожидает нажатия какой-либо клавиши.

{ анализ вводимых пользователем клавиш }

Uses Crt;

var ch:char;

write(" Нажмите клавишу:");

ch:=ReadKey;

if ch=#0

then { расширенный код сканирования }

ch:=readkey;

write(" Клавиша ");

case ch of

#59..#68: writeln("функциональная: F1-F10");

#82: writeln(" вставка : Ins");

write(" перемещения курсора");

writeln(" расширенный код = ",ord(ch))

end ; {case}

else writeln(" код символа = ",ord(ch))

until ch=#27 ; { клавиша Esc }

ch:=ReadKey { ожидание нажатия клавиши

для выхода из программы }

В приложении 1 приведена кодовая таблица ПЭВМ и все расширенные коды сканирования.

Используя рассмотренные процедуры разработать программу,которая по нажатию клавиш:

«стрелка вправо и влево» меняет цвет фона (по кругу от 0до 7)

«стрелка вверх и вниз» меняет цвет символов (от 0до 15)

Алфавитно-цифровой клавиатуры воспроизводит данный символ на экран дисплея.

Ecs завершает работу программы и восстанавливает первоначальные параметры цветности.