BASIC-256. Глава 3
Методические материалыАвтор: Владимир Черный
Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Сергей Ирюпин.
Предыдущие главы:
Глава 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 позволяет нам давать названия областям компьютерной памяти, а затем хранить в них информацию. Эти именованные области называются переменными.
Есть четыре типа переменных: числовые переменные, строковые, числовые массивы и массивы строк. В этой главе вы узнаете, как использовать числовые переменные, а другие — в остальных главах.
Числовая переменная
Числовая переменная позволяет присвоить имя блоку ячеек в оперативной памяти компьютера. Вы можете хранить и извлекать цифровые (целые или десятичные) значения из числовой переменной в вашей программе. |
Имена переменных чувствительны к регистру. Это означает что имя переменной, записанное буквами в верхнем регистре и такое же имя, но записанное в нижнем регистре, представляют разные области памяти компьютера. |
Программа 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
- ветка 4.0 basic256-0.9.6-alt0.M40.1.i586.rpm
- ветка 4.1 basic256-0.9.6-alt0.M41.1.i586.rpm
- ветка p5 basic256-0.9.6-alt0.M50P.1.i586.rpm
- ветка 5.1 basic256-0.9.6-alt0.M51.1.i586.rpm
Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)
Как установить BASIC-256 в Linux
Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm
Оставьте комментарий