Звуковые эффекты в QBasic 1
Оператор BEEP Наиболее простой звуковой оператор BEEP воспроизводит короткий звуковой сигнал длиной в четверть секунды. Он может быть использован для привлечения внимания пользователя к определенному месту программы, например, сигнализируя о вводе неправильного значения или сопровождая вывод сообщения об ошибке. 2
Оператор SOUND Оператор SOUND позволяет значительно разнообразить производство звука. Он содержит два аргумента: SOUND частота, продолжительность где частота –числовое выражение, определяющее частоту звука в Гц; продолжительность – числовое выражение, определяющее продолжительность звучания. Параметр частота может иметь любое значение от 37 до – он определяет число колебаний в секунду и измеряется в Гц. 3
Продолжительность звучания измеряется в тиках. Это необычная единица измерения времени. Одна секунда содержит 18.2 тика, значит, для получения звука продолжительностью 5 секунд надо задать этот параметр равным: 18.2 * 5 = 91 При выборе частоты звука в 500 Гц оператор приобретет вид : SOUND 500, 91 Пять секунд – слишком долгий звук, не стоит им часто пользоваться. Оператор SOUND может оказаться весьма полезным. При встрече оператора SOUND QBasic включает воспроизведение звукового сигнала, продолжает выполнение остальной программы и выключает звук, если встречает другой оператор SOUND с параметром продолжительность, равным нулю. 4
В данной программе звук воспроизводится в течение всего заданного времени: REM Программа 1.1 REM Включение звука CLS 'начало звучания SOUND 500, 91 'вывод текста LOCATE 10, 30 PRINT "ЖДИТЕ ОТВЕТА" END 5
В этой программе второй оператор SOUND обрывает звучание, заданное первым оператором: REM Программа 1.2 REM Выключение звука CLS 'начало звучания SOUND 500, 91 'начало цикла для вывода текста FOR TIME%=1 TO 50 PRINT "ЖДИТЕ ОТВЕТА" NEXT TIME% 'прерывание звука SOUND 500, 0 END 6
В этой программе оператор SOUND используется для создания серии коротких звуков: REM Программа 1.3 REM Использование оператора SOUND CLS 'начало цикла для звука FOR TIMES%=1 TO 10 'пауза SOUND 30000, 3 LOCATE 10, 20 PRINT " ТЕЛЕФОН ЗАНЯТ! " 'звучание SOUND 450, 5 NEXT TIMES% END 7
Музыкальная клавиатура Октава состоит из 12 клавиш (7 белых и 5 черных), а вся клавиатура – из 7 октав. Оператор PLAY позволяет «играть» на компьютере, имитируя все 84 клавиши. 8
Оператор PLAY Для композиторских целей более подходящим будет оператор PLAY. Он позволяет записывать краткие музыкальные пьесы в виде текстовых выражений. Общая форма оператора следующая : PLAY текст где текст – текстовое выражение, состоящее из специальных команд, создающих музыку. Оператор PLAY позволяет: проигрывать отдельные ноты; создавать паузы; менять темп. 9
Команды оператора PLAY Существует специальный набор команд, который используется для создания музыки на компьютере. Примеры: Введите в программу различные операторы: PLAY "CDEFGAB" Вы услышите звучание нот четвертой октавы. Чтобы перейти на третью октаву, вы должны добавить букву О с номером 3: PLAY "О3 CDEFGAB" Чтобы воспроизвести все 12 нот третьей октавы, воспользуйтесь следующей инструкцией : PLAY "О3 С С+ D D- E F F+ G A- B- B" Знаки + и # оба означают диез, а знак - означает бемоль. Введя в программу следующий оператор, можно также получить звучание нот третьей октавы : PLAY " " Третья октава начинается с ноты 37 всей компьютерной музыкальной клавиатуры, При этом ноль в качестве номера ноты позволяет создать паузу. 10
Команды оператора PLAY 11 Команда Действие Ох-Задание октавы х (0-6) >-Увеличить октаву на 1 <-Уменьшить октаву на 1 Nx-Воспроизвести ноту х (1-84) Lx -Задание продолжительности последующей ноты (1-64). L1-целая нота, L2-половина ноты и т.д. MS-Задание громкости Стаккато MN-Задание громкости Нормально ML-Задание громкости Легато Px-Пауза для определенного числа ударов (1-64). Р1 пауза длиной в ноту, Р2 –пауза длиной в полноты и т.д.
Команды оператора PLAY 12 Tx -Задание музыкального темпа в четвертях нот в минуту (32-255): аллегро- Т120 анданте- Т80 адажио -Т70 ленто - Т64 MF-Воспроизведение музыки в основном режиме MB-Воспроизведение музыки в фоновом режиме + или #-Знак для обозначения диез для предшествующей ноты. - (суффикс) -Знак для обозначения бемоль для предшествующей ноты.. (суффикс) -Предыдущая нота играется в 3/2 ее продолжительности.
Продолжительность ноты и паузы По умолчанию звук проигрывается как целая нота. Если мелодия включает в себя ноты различной длины, то потребуется команда Lx, меняющая продолжительность звучания. Эта команда вызывает звучание ноты продолжительностью 1/x. Например, оператор PLAY "О3 L2 C D L8 E F G L32 A B " воспроизводит ноты C и D как половинные ноты, ноты E, F и G как одну восьмую ноты, а А и В как одну восьмую четвертой ноты. Число, следующее за буквой L должно быть из диапазона от 1 до
Если необходимо изменить продолжительность звучания одной ноты в мотиве, можно просто вставить число после знака ноты. Например, оператор PLAY "О3 L1 C D E F8 G A B" воспроизводит ноты C, D, E, G, A, B как целые, а ноту F как одну восьмую. Если поставить после буквы знак точки (. ), то продолжительность ноты увеличиться в полтора раза. Пауза может быть создана с помощью команды Рх, которая подобна команде Lx PLAY "О3 L2 C D P1 L8 E F G P2 L32 A B" Переменная х может принимать значения от 1 до 64. При этом 1 создает самую продолжительную паузу, 64- самую короткую. 14
Задание темпа Темп музыкальной пьесы характеризуется итальянскими словами аллегро, анданте, адажио, ленто и т.д. Он определяет скорость, с которой проигрывается музыка. Скорость соответствует числу ударов метронома в минуту. Можно задать темп музыки, используя команду Тх, где х – целое значение для числа ударов метронома. По умолчанию значение переменной х равно 120, что задает средний темп ( между алегретто и аллегро). Значение х может меняться от 32 до 255. Темпу ленто приблизительно соответствует частота 64, адажио примерно равно 70, а значение около 78 означает анданте. 15
Режим звучания: основной и фоновый У оператора PLAY отсутствует свойство оператора SOUND – воспроизведение звука в фоновом режиме, т.е. при выполнении других операторов программы. При использовании оператора PLAY программа приостанавливается на время исполнения мелодии. Но Но, если мотив содержит меньше 32 нот, его можно поместить в память, и тогда программа не будет прерываться на время исполнения музыкального произведения. А помогает в этом команда МВ. 16
17 Пример: Проверьте выполнение программы, а затем удалите команду МВ и сравните результаты двух программ. REM Пример фоновой музыки SCREEN 1 CLS 'помещение музыки в буфер PLAY "MB MSО3 B4A0 F+8G8A4 P64 F+8G8A4 P64 G8F+8E" PLAY "P32О3 B8 B8A4 G32F+8G8A4 G32F+8G8A4 G8F+8E" 'начало цикла для изменения параметров окружности FOR PARAM%=1 TO 3 FOR RADIUS%=3 TO 60 STEP 3 'рисование окружности CIRCLE (50+50 * PARAM%, 80), RADIUS%, PARAM% NEXT RADIUS% 'пауза FOR TIMES%=1 TO 2000 NEXT TIMES% NEXT PARAM% END
Задание для самостоятельного выполнения: Введите следующую программу и прослушайте результат ее выполнения: REM "Подмосковные вечера" PLAY "MLО1 DFAFGGFEAAGGDDDP4F4>CP64CDDC<A+AAAP4BB" PLAY "MLО2D-D-ED C<B-AAGFAAGGDD" END Эта программа исполняет песню Подмосковные вечера. Попробуйте записать свою любимую мелодию. Если вы запишите ноты в операторе DATA и затем прочтете их в текстовую переменную, то сможете использовать этот мотив в любом месте программы. 18
Приложение 1) Вечерний звон (русская народная песня) PLAY "T80 ML О2 G8 A8 G8 E4. G8>E8 C8 D4. F4. C4" 2) Степь да степь кругом ( русская народная песня) PLAY "T80 ML О3 G4 G8 A4 G8 > E2. E4 E8 F4 E8 D8 C8 D8 F4 C2" 3) Яблочко (русский народный танец) PLAY "T80 MS О4 G4 G4 D8 F4 D8 E-8 C8 G4 D8 C4 C4 < G16 A16 B-4 B-8 A8 G8 A8 B-8 G4 G4" 4) Калинка - малинка. PLAY "MB MSО3 B4A0F+8 G8 A4 P64 F+8 G8 A4 P64 G8 F+8 E P32 B8B8 A4 G32 F+8 G8 A4 G32 F+8 G8 A4 G8 F+8 E" 19
5) Во саду ли в огороде PLAY "L8 FF EE DDD E FF EE L4 DD L8 CC BB AAA B CC BB L4 AA" 6)Маленькой елочке… PLAY "G4 E8 E8 4 E8 E8 G8 F8 D8 E8 C2 A4 C8 A8 G4 E8 E8 G8 F8 E8 D8 C2« 7) Катюша. PLAY " T100 MS О3 F4. G8 A-4. F8 A-8 A-8 G8 F8 G4 C4 G4. A-8 B-4. G8 B-8 B-8 A-8 G8 F2 > C4 F4 E-4 F8 E-8 D-8 D-8 C8 C4 D-4 C4. < A-8 B-8 B-8 A-8 G8 F2" 8) Темная ночь. PLAY "T80 MS О3 C4 E-8 D8 C2 P4 C4 C4 < G8 F8 E-2 P4 D8 E-8 F4 E-8 D8 C2" 9) Лизгинка PLAY " MS О3 D4 D8 E-8 D8 C8 D4 D8 C8 C4 C4 C8 D8 C8 C4 C8 <D-8 A8 G4. G4. " 20
21 10) Марш Черномора (Глинка) PLAY " MS О3 B2> C4 C4 < F+4 A4 G+4 B4 D+4 E4 E8. E16 E4" 11) К Элизе (Бетховен). PLAY "T80 MN О3 E16 D+16 E16 D+16 E16 D16 C16 C8 P16 E16 D+16 E16 D+16 E16 D16 C16 C16 < B16 A4" 12) DEEP PEARL PLAY " MS О3 E-4 G-4 A-2 E-8 G-4 B-8 A-2 E-4 G-4 A-2 G-4
22 Литература: