Разделы
Мы и Музыка
Рубрики
Учащимся вперед...»

Музыка и программирование

Связь шахмат и домино с музыкой мы уже обсуждали. А что можно сказать по поводу программирования? Можно ли при помощи клавиатуры пианино или синтезатора наглядно демонстрировать разные понятия из программирования?

В полной октаве 8 ступеней, а в байте — 8 бит. Если для простоты взять до-мажорную гамму, то им будут соответствовать белые клавиши. Нажатая клавиша - 1, не нажатая - 0. Для до-мажорного трезвучия получим такую запись:

10101000 - 168

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

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

100000000000
010000000000
001000000000

и т.д.

На что это похоже? На цикл. А вот и задача. Написать цикл, в котором единица будет каждую секунду последовательно перемещаться по строке из нулей и отображаться на экране.

Если единице сопоставить включенный светодиод, а нулю — выключенный, то получится световой эффект «бегущая точка», который можно запрограммировать, например, на Ардуино. А у пианиста получается «бегущая клавиша».

При игре на фортепиано каждый палец (в подавляющем большинстве случаев) отвечает за нажатие одной клавиши для получения одного звука. Есть любопытные аккорды, где можно одним пальцем зажать две клавиши, но чаще 1 к 1. На флейте для получения разных звуков используется разное сочетание пальцев от 1 до 9! Синхронно использовать 9 пальцев для получения всего одного звука?! Нет, уж лучше стучать ногой по бочке ударной установки.

В программировании различают линейный алгоритм, ветвление и цикл.

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

Ветвление — это выбор того, какой звук или звуки будут звучать дальше. Ветвление часто используется при сочинении музыки и импровизации. Например, часто стоит задача выбора того, с какой стороны более гармоничным будет переход от неустойчивую ступени в устойчивую. Например, в тонику до перейти с ре или си? После аккорда Am сыграть Dm или F? Сыграть узкий интервал в мелодии или широкий, тон или полутон? Поначалу такой выбор может казаться непростым, но с опытом начинаешь слышать, в каком случае получается более гармоничный и подходящий по смыслу вариант.

Что можно сопоставить с циклом кроме игры гаммы? Всё, что имеет цикличность. Например, шагающий бас в рок-н-ролле, секвенции в мелодии, исполнение квадрата, различные виды аккомпанементов - арпеджио, равномерная игра интервалов и аккордов и т.д.

Цикл в программировании упрощает код, а при игре на пианино усложняет. Да, а как вам синтезаторы с автоаккомпанементом и/или арпеджиаторами? Нажал на кнопку, а он сам играет этюд на зачете в музыкальной школе.

Отдельную клавишу можно представить в виде переменной. У неё есть имя — до, например. Какое значение хранит клавиша? Например, частоту звука.

Клавиши на клавиатуре можно представить в виде статического массива. Ступени и клавиши имеют порядковые номера — индексированный массив. Но они также имеют названия — ассоциативный массив. А если у старого пианино нет нескольких клавиш, то, видимо, их удалили из «массива» клавиатуры.

А указатели есть в музыке? Сколько угодно. Например, транспонирование произведения в другую тональность. Для этого нам не нужно физически вытаскивать клавиши из пианино и переставлять их в другое место. Достаточно просто указать, от какой ноты нужно играть. В этом и состоит одно из преимуществ современного равномерно темперированного строя — натянул струны и играй в любой тональности. А в древности приходилось перестраивать строй инструмента. Хочется поиграть в другой тональности — покрути колки сначала.

Объектное программирование тоже можно наглядно изучать на примере музыкальных инструментов. Музыкальный инструмент — абстрактный объект, у которого есть свойство — звукоряд. Далее идут виды музыкальных инструментов - струнные, духовые, ударные, язычковые, клавишные, электромузыкальные и механические. Затем подвиды, а после классы конкретных музыкальных инструментов, например, гитара. Какие свойства есть у гитары? Количество и тип струн, количество ладов, параметры грифа, цвет, цена и т.д. Методы? Получить номер нажатой клавиши или задать клавишу, которую нужно нажать. События? Возникновения звука и его окончание. Этак мы скоро напишем программный синтезатор. А почему бы и нет, если это интересно.

Клавиатура пианино — это интерфейс. А что же на ним скрывается? Сложная механика, «запрограммированная» на получение звуков, которую можно увидеть, сняв панели. Разработчики бэкэнда — это как мастера, которые могут починять музыкальные инструменты. Это непросто, но зато столько всего интересного внутри!

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

Самая простая тональность для игры на пианино — до-мажор. И этой тональности мы сопоставим JavaScript – весёлый и беззаботный язык программирования. А как же «самый простой язык на планете» Python? Пусть будет фа-мажор. А язык программирования Cи? Тут всё понятно — си-бемоль минор с 5-ю ключевыми знаками, потому что его изучать и сложно, и грустно. C++? Си-мажор, например. Delphi? Первая буква D, значит ре. Изучается Delphi легко и весело — ре-мажор. Java? Это что-то с семью знаками минимум и очень большой грустью — ля-бемоль-минор.

Программист — это импровизатор — кодирует на лету. Или композитор, если он всё делает по науке, сначала проектирует, потом кодирует, отлаживает и т.д.

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

Пользователь — это исполнитель. Ему нужны ноты и желательно видеозанятия, где показывается, как в той или иной программе что-то делать. А как порой непросто разобраться в нотах с большим количеством ключевых знаков. Также непросто, как и в чужом программном коде без комментариев.

Думаю, идея сопоставления понятна и дальше можно расширить его по своему желанию.

Учащимся вперед...»

Александр Страшко
Вконтакте
28.03.24

© 2006-2023 Мы и Музыка