СПО в российских школах

Команда ALT Linux рассказывает о внедрении свободного программного обеспечения в школах России
Ноябрь 26, 2010

BASIC-256. Глава 3

Методические материалы
Автор: Владимир Черный

Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Сергей Ирюпин.
Предыдущие главы:

Где взять BASIC-256

Глава 3: Звуки и музыка

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

Основы звука – все, что вам нужно знать о звуках

Звук возникает благодаря колебаниям воздуха, воздействующим на барабанную перепонку. Эти колебания называются звуковыми волнами. Когда воздух колеблется быстро, вы слышите высокую ноту, а когда воздух колеблется медленно — низкую ноту. Уровень колебаний называют частотой.


Рисунок 7. Звуковые волны

Частота измеряется в единицах, которые называются герц (Гц). Она показывает, как много циклов колебаний (вверх и вниз) в секунду совершает звуковая волна. Обычный человек может слышать очень низкие звуки частотой 20 Гц и очень высокие звуки частотой 20000 Гц. BASIC-256 может воспроизводить звуки в диапазоне от 50 до 7000 Гц.

Другое свойство звука — его длительность. Компьютеры работают очень быстро и позволяют измерять время с точностью до миллисекунд (мс). Миллисекунда составляет 1/1000 (одну тысячную) долю секунды.

Давайте создадим некоторые звуки.


1 # c3_sounds.kbs
2 sound 233,1000
3 sound 466,500
4 sound 233,1000

Программа 16: Сыграем три отдельные ноты

Возможно, вы услышали щелкающий звук в колонках между звуками, сыгранными в этом примере. Это вызвано тем, что компьютер создает звук и ему необходимо остановиться и «подумать» примерно миллисекунду. Оператор sound может быть также записан с указанием списка частот и длительностей, чтобы сгладить переход от одной ноты к другой.

1 # c3_soundslist.kbs
2 sound {233,1000,466,500,233,1000}

Программа 17: Список звуков

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

sound частота, длительность
sound {частота1, длительность1, частота2, длительность2, …}
sound массив_чисел

Основная форма оператора sound использует два аргумента: (1) частоту звука в Гц (колебаний в секунду) и (2) длительность звука в миллисекундах (мс). Вторая форма sound позволяет указывать несколько пар значений (частота, длительность) в списке, заключенном в фигурные скобки {}. Третья форма sound использует массив, который содержит частоты и длительности. Речь о массивах пойдет в Главе 11.

Как же BASIC-256 воспроизводит мелодию? Первое, что мы должны сделать — преобразовать ноты на нотном стане в частоты. На рисунке 8 показаны две октавы нот, их названия и приблизительная частота, которая их создает. В музыке есть ещё особое понятие – пауза. Пауза означает — «не воспроизводить музыку в определенный интервал времени». Если вы используете список звуков, то можете вставить паузу, указав частоту нуль (0) и необходимое время паузы.


Рисунок 8. Ноты1

Возьмите небольшой музыкальный фрагмент, а затем посмотрите значения частоты для каждой ноты. Почему бы нам не попросить компьютер сыграть «Атака!» (смотрите рисунок 9). Вы наверное заметили, что нота «соль» (G) второй октавы находится выше нотного стана. Если нота располагается не на нотном стане, ее частоту можно удвоить, чтобы сделать выше, или уменьшить наполовину, чтобы сделать ниже. Получается та же самая нота, только на октаву выше или ниже.2


Рисунок 9. Атака!

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

Продолжительность в миллисекундах (мс) можно вычислить, если вы знаете скорость музыки в битах в минуту (BPM – beats per minute), используя формулу 1.

Длительность ноты = 1000∗60/ BPM∗Относительная длина

Формула 1. Вычисление длительности ноты

Название
ноты
Символ
ноты и паузы
Относитель-
ная длина
100 BPM
длительность мс
120 BPM
длительность мс
140 BPM
длительность мс
Целая с точкой 6.000 3600 3000 2571
Целая 4.000 2400 2000 1714
Половина с точкой 3.000 1800 1500 1285
Половина 2.000 1200 1000 857
Четверть с точкой 1.500 900 750 642
Четверть 1.000 600 500 428
Восьмая с точкой 0.750 450 375 321
Восьмая 0.500 300 250 214
Шестнадцатая с точкой 0.375 225 187 160
Шестнадцатая 0.250 150 125 107

Таблица 2. Ноты и обычная длительность

Теперь с формулой и таблицей для расчета длительности, мы можем написать программу, чтобы сыграть сигнал «Атака!».


1 # c3_charge.kbs — играем сигнал «Атака!»
2 sound {392,375,523,375,659,375,784,250,659,250,784,250}
3 say "Атака!"

Программа 18: Атака! Скачать

Зайдите в интернет и найдите музыку для «Row-row-row Your Boat» или другую мелодию, напишите программу для её воспроизведения.

Числовые переменные

Компьютеры действительно хорошо запоминают разные вещи, в то время как у нас, людей, с этим бывают проблемы. Язык BASIC-256 позволяет нам давать названия областям компьютерной памяти, а затем хранить в них информацию. Эти именованные области называются переменными.

Есть четыре типа переменных: числовые переменные, строковые, числовые массивы и массивы строк. В этой главе вы узнаете, как использовать числовые переменные, а другие — в остальных главах.

Числовая переменная

Числовая переменная позволяет присвоить имя блоку ячеек в оперативной памяти компьютера. Вы можете хранить и извлекать цифровые (целые или десятичные) значения из числовой переменной в вашей программе.
Имя числовой переменной должно начинаться с буквы, оно может содержать латинские буквы3 и числа и чувствительно к регистру. Запрещается использовать слова, принадлежащие языку BASIC-256 при наименовании переменных (см. Приложение I).
Примеры правильных имен переменных: a, b6, reader, x и zoo.

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

Программа 19 – это пример программы, использующей числовые переменные.


1 # c3_numericvariables.kbs
2 numerator = 30
3 denominator = 5
4 result = numerator / denominator
5 print result

Программа 19: Простые числовые переменные

Программа использует три переменные. В строке 2 значение 30 сохраняется в переменной под названием «numerator». В строке 3 значение 5 сохраняется в переменную «denominator». В строке 4 значение из «numerator» делится на значение из переменной «denominator» и сохраняет результат в переменной с именем «result»4.

Теперь, когда мы увидели переменные в действии, мы можем переписать программу «Атака!», используя переменные и формулу для расчета длительности (Формула 1).


1 # c3_charge2.kbs
2 # играем сигнал атаки, используя переменные
3 beats = 120
4 dottedeighth = 1000 * 60 / beats * .75
5 eighth = 1000 * 60 / beats * .5
6 sound {392, dottedeighth, 523, dottedeighth, 659, dottedeighth, 784, eighth, 659, eighth, 784, eighth}
7 say "Атака!"

Программа 20: Атака! с переменными. Скачать

Изменяйте скорость воспроизведения музыки, регулируя значение, хранящееся в переменной «beats».

В этой главе для «Большой программы» мы выберем фрагмент музыки И.С. Баха и напишем программу для её воспроизведения.
Этот фрагмент — часть Маленькой Фуги И.С. Баха в соль-мажор.

Рис. 10. Первая строка Маленькой Фуги И.С. Баха в соль-мажор


1 # c3_littlefuge.kbs
2 # Музыка И.С. Баха - XVIII Фуга в соль-мажор.
3 tempo = 100 # ритм - удары в минуту
4 milimin = 1000 * 60 # количество миллисекунд в минуте
5 q = milimin / tempo # ритм задается четвертями (целая = 4 четверти) - это четверть
6 h = q * 2 # Это половинка - 2 четверти
7 e = q / 2 # это восьмая - половинка от четверти
8 s = q / 4 # шестнадцатая = 1/4 от четверти
9 de = e + s # восьмая с точкой = восьмая + шестнадцатая
10 dq = q + e # четверть с точкой = четверть + восьмая
11
12 sound {392, q, 587, q, 466, dq, 440, e, 392, e, 466, e, 440, e, 392, e, 370, e, 440, e, 294, q, 392, e, 294, e, 440, e, 294, e, 466, e, 440, s, 392, s, 440, e, 294, e, 392, e, 294, s, 392, s, 440, e, 294, s, 440, s, 466, e, 440, s, 392, s, 440, s, 294, s}

Программа 21: Маленькая Фуга в соль-мажор. Скачать

———————————
1Латинские названия нот можно посмотреть в википедии. За эталон частоты ноты берётся нота ля (A) первой октавы, частота которой должна быть равной 440 Гц, что и видно на рисунке (прим. редактора).
2Отношение частот одинаковых нот из соседних октав равно двум или 1/2. (прим. редактора).
3В именах переменных можно использовать только латинские буквы (A..Z,a..z), использование русских букв недопустимо (прим. переводчика)
4Имена переменныем выбирают в соответствии со смыслом хранимых данных, поэтому автор использует: numerator (англ) — числитель, denominator (англ) — знаменатель, result (англ)- результат. В итоге программа вычисляет: результат = числитель / знаменатель (прим. редактора).

============================

Где скачать BASIC-256:

Для дистрибутивов ALT Linux

Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)

Как установить BASIC-256 в Linux

Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm

Оставьте комментарий