Найти в Дзене
Код Нот

Первый в мире музыкальный код

В 1843 году Ада Лавлейс переводила статью Луиджи Менабреа «Об Аналитической машине Бэббиджа» с французского на английский язык. Она дополнила перевод своими размышлениями и комментариями, которые оказались гораздо объемнее и значимее исходного текста. Всего вышло 7 примечаний, которые она обозначила буквами от A до G. В примечание А она написала:

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

Ее «Примечания» стали более значимым трудом в истории программирования, чем сама статья, поскольку в них написана и опубликована первая в мире компьютерная программа - алгоритм для вычисления чисел Бернулли. А слова о связи гармонии и алгоритма стали пророческими, открыв эру музыкального программирования.

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

Одной из первых машин, которая стала воспроизводить музыку стала CSIRAC, разработанная в Австралии в 1949 году. Для CSIRAC не существовало языка программирования в современном понимании этого слова. Программы для него писались на языке самого низкого уровня — в машинных кодах (machine code). Программисты общались с машиной напрямую, используя числовые коды, которые соответствовали инструкциям процессора. Каждая команда, например - "сложить два числа", "загрузить данные из памяти" - представляла собой число. Эти числовые коды вводились в память машины CSIRAC с помощью перфоленты или, на самых ранних этапах, путем установки переключателей на передней панели компьютера. Программист должен был вручную распределять ячейки памяти и просчитывать каждую инструкцию, которую должна была выполнить машина.

Программа, генерировавшая музыку, была написана математиком Джеффом Хиллом. Он не писал "ноты" в привычном смысле. Его программа использовала аппаратный генератор, который изначально предназначался для создания звуковых импульсов для тестирования оборудования. Код прерывал нормальную работу процессора с точно рассчитанными интервалами, заставляя его отправлять импульсы на динамик. Частота этих прерываний определяла высоту тона, а их длительность — ритм. Код был еще ниже уровнем. Он состоял из чисел, введенных с перфоленты. Каждая строка "программы" была числом, где определенные биты указывали процессору на операцию и адреса в памяти. Программа была буквально списком таких чисел, которые программист вводил в память машины.

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

Кода Джеффа Хилла не сохранился в общедоступных цифровых архивах. Но можно реконструировать принцип его работы и представить, как выглядели бы аналогичные инструкции, используя современные понятия о низкоуровневом программировании. Это будет не копия, а точная модель того, что происходило внутри CSIRAC.

Принцип работы программы Хилла:

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

1. Прерывала основную программу с точно рассчитанными интервалами.

2. Посылала импульс на генератор.

3. Частота импульсов определяла высоту тона: чем чаще импульсы, тем выше нота.

4. Длительность последовательности импульсов определяла ритм и длительность ноты.

Увидеть оригинальный код Джеффа Хилла — все равно, что найти первую в мире фотографию. Этого артефакта, увы, нет в открытом доступе. Но мы точно понимаем его структуру: это была низкоуровневая программа, которая в реальном времени управляла аппаратными прерываниями для создания музыкальных звуков. Это был акт чистого программистского творчества и инженерной изобретательности.