Программист. Рассказ об интересной профессии
Мне вот, например, совершенно не нравится мрачный интерфейс музыкальных программ, не нравятся темные окна, чёрные кнопки и выпадающие по всякому случаю меню, на которых мельчайшим шрифтом предлагается масса опций, о которых ты уже забыл, многие из которых тебе совершенно не нужны, но они мельтешат перед глазами как назойливая реклама.
Но главное, этот чёрный фон! Неужели людям нравится создавать музыку впотьмах?
Ну да, Тёмный Лорд. Мрачный рок. Не знаю, как Вам, а мне чёрный интерфейс совершенно не нравится. И потом - а где же ноты? Где та нотная запись, на которую Вы глядите?
Совсем другое - моя программа «Пианола». Её окно не занимает весь экран. Она компактна и изящна - клавиатура на две октавы, кнопки для набора символов, сверху нотная строка и два десятка управляющих программой клавиш.
Всё это постоянно находится на привычном месте, и не надо суетиться и искать что-либо в выпадающих меню - их в программе просто нет.
Зато есть два режима - рабочий режим, он называется «Клава», и режим «Help», в котором Вам всё объяснят. В режиме Клава Вы занимаетесь музыкальным творчеством, то есть, заполняете строку обозначениями нот и формирующими музыку символами, а если что забыли, то переходите в режим Help, где все возможности Ваших действий подробнейшим образом описаны.
Но главное - окно программы узкое, и его можно перемещать. Оно лежит поверх нот на Вашем экране, и Вы располагаете его так, как это Вам удобно. В этом плане интерфейс Пианолы напоминает интерфейс калькулятора - есть строка, есть кнопки, а само окно не очень много места занимает, и его можно расположить в любой части экрана.
В общем, программа проста настолько, насколько это только можно.
Но послушайте, какую музыку можно в ней создавать - https://disk.yandex.ru/d/SeN_g37-2qEh0Q
Не всякая музыкальная студия способна на такое. Вы мне не верите? Тогда попробуйте.
Нет, разумеется, сделать для музыки такое исполнение можно, только вот почему-то, подобных, сделанных на компьютере записей классической музыки, я в интернете не нахожу.
Ну нет, так нет. Как бы то ни было, программа Пианола меня вполне устраивает. Она мало подходит для аранжировки, но для исполнения классической музыки по имеющимся в Вашем распоряжении нотам, она куда как хороша.
И, разумеется, принципы, заложенные в программу Пианола, можно развивать.
Этим я, в своё удовольствие, как раз и занимаюсь, и именно об этом, о том, как интересна работа программиста, я и хочу Вам рассказать.
КАК Я СТАЛ ПРОГРАММИСТОМ
На физическом факультете МГУ, когда я там учился, о программировании речи не шло, также как и такого предмета, как «информатика», в то время в школах не было. Но зато на физфаке преподавали «Методы математической физики» - могучий раздел математики, подготавливающий людей не только к решению математических уравнений, но и к реализации этих решений путём счёта на ЭВМ.
На кафедре «Оптика и спектроскопия» преподавали «Геометрическую оптику» - раздел оптики, касающийся расчёта оптических систем, старыми классическими методами, то есть по формулам, не учитывающим аберрации и не очень приспособленным к компьютерному счёту.
Несколько другая форма представления оптических систем - так называемая «Матричная оптика», более приспособлена к реализации в виде компьютерной программы, однако старичком преподавателем до нашего сведения она не доводилась.
Поэтому тайнами программирования мне пришлось овладевать немного позже, и делать это самостоятельно.
Портативный калькулятор Б3-34 - маленькая вычислительная машинка, вначале помогал мне в этом. В этой маленькой машинке были очень приятные возможности выстраивать цепочки вычислений и замыкать их в циклы. Именно таким способом я ухитрялся проводить расчёты простеньких объективов, устраняя в них аберрации.
Не очень серьёзные расчёты, фактически детская игрушка в сравнении с программами, написанными на Фортране, и предназначенными для больших вычислительных машин. Кстати, язык Фортран я тоже освоил, но это было несколько позже.
После окончания МГУ, меня приняли на работу в НИИАП (АП расшифровывается как «автоматическое приборостроение) - должность «инженер, 110 рублей» - так было сказано при распределении.
Процедура распределения очень напоминала аукцион. И действительно, выпускники не сами находили себе работу, а за ними охотились представители разных предприятий, называя свою цену. У тех, которые были связаны с государственными тайнами, и цены были побольше - ставка 130 рублей и офицерские погоны. Мне такое счастье не очень светило - отец и мать были в своё время репрессированы, потому меня и не взяли (вслух об этом не говорилось, но я именно так это и понимаю). Но 110 рублей, это лучше, чем 100 рублей, были и такие предложения.
Осчастливил меня 110 рублями некто Сосунов - представитель отдела кадров НИИАП. И, честно скажу, распределился я очень удачно - и работа оказалась интересной, и вычислительная машина в моём распоряжении появилась.
Это не был персональный компьютер, такой, какой можно было бы сложить как книжку и переносить с места на место. Это была малая вычислительная машина «Наири-2» - большой стол с мигающими индикаторами, и столик меньшего размера слева. На нём был перфоратор, фотосчитывающее устройство и электрическая пишущая машинка «Консул». Тут и происходила основная работа.
Никаких жёстких дисков тогда не было. Программы существовали в виде небольших рулончиков - перфолент с набитыми на них дырочками. Считывание кода сопровождалось характерными звуками чирк-чик в очень быстром темпе. Если же в перфоленте обнаруживалась ошибка, то фотосчитывающее устройство ленту выплёвывало.
В течении месяца мы все занимались на курсах по программированию на этой машине - на самом низком уровне двоичных кодов, и в режиме «автоматического программирования», то есть с использованием неких мнемонических команд, заменяющих собой куски двоичного кода.
С тех пор у меня появился особый интерес к мнемоническим языками и к их структуре. Структура команд «Наири» была гибкой - они могли быть трёх-адресными, двух-адресными, или одно-адресными, такими, какие в настоящее время используются повсеместно.
Главными достоинствами любого мнемонического языка являются две вещи - это эффективность и удобство. Хорошая структура мнемонического языка обеспечивает его успех. С другой стороны, каждая структура высшего уровня использует структуры низшего уровня, а самым низшим уровнем является «компьютерное железо», и мне в этом отношении повезло - я познакомился с «железом» на самых первых этапах его появления. Поэтому такие примитивные вещи, как массив, строка, буфер, стек или магазин, а также многое другое, я знаю хорошо, а зная логику действий на низшем уровне легко подстраивать под неё и структуру любого алгоритмического языка.
Например, создавая мнемонический язык для написания музыки, я вполне представлял себе реализацию своих планов на более низком уровне - на уровне работы со строковыми переменными.
Программирование не стало моей основной профессией, но оно серьёзно помогало мне в практической инженерной работе - каждую новую задумку можно было проверить не только в эксперименте, но и путём расчёта на компьютере. И очень часто расчётный путь был и дешевле, и короче.
Возможность проводить специализированные инженерные расчёты самому, не обращаясь за помощью к программистам профессионалам, тоже очень важна - между заказчиком и исполнителем часто возникает недопонимание, в результате которого заказчик получает совсем не то, что он хотел. Вы шили для меня рубашку? А что же гульфик на отвороте рубашки делает? Такую рубашку и носить-то неудобно.
И зачем же Вы мне женские пуговицы пришили? Хотелось бы поскромнее, и на рукавах сборки совсем не к чему. Вот так и происходит, когда нужную тебе программу делаешь не ты сам, а пусть и квалифицированный, но посторонний портной.
Ну, в общем, Вы поняли - самостоятельное программирование не просто увлекательно, оно и результаты приносит совсем не тривиальные.
ИСПОЛЬЗОВАНИЕ СЕМПЛОВ В СОЗДАНИИ МУЗЫКИ
Теперь перенесёмся из истории в настоящее, и я хочу показать Вам ход своих рассуждений.
Программа «Пианола-М» создаёт музыку не так, как это делают большие музыкальные студии, а несколько по-другому. А именно - она не создаёт звук, который можно записать, она сразу создаёт запись этого звука. Вы спросите - какая разница. Разница есть, и она очень большая.
Если Ваша музыка должна звучать в реальном времени, то Вам нужно очень торопиться - если одновременно играют несколько инструментов, или звучит аккорд, то и звуки создаются одновременно в нескольких каналах. И даже если эти каналы работают попеременно, то всё равно нужно очень спешить - нужно быстро получить небольшие порции звука от каждого из каналов и тут же суммировать эти порции, и тут же направить этот звук в динамики.
И совсем другое дело, когда Вы делаете не живой звук, а запись этого звука. В этом случае Вы звук каждой ноты записываете в буфер от самого её начала и до конца, потом переходите к воспроизведению другой ноты аккорда, или к другому музыкальному инструменту, и полученные звуки направляете в буфер, складывая их со звуками, уже находящимися там. И эта работа делается не разными каналами, а одним единственным, что очень упрощает задачу.
Вторым отличием программы Пианола является то, сто она не использует семплы. Звук в ней вычисляется, такой звук сделать труднее, но зато легче им управлять, он легко перестраивается по высоте, по тембру, и с ним легче создавать то, что называется выразительным исполнением. Для озвучивания классической музыки это самое оно.
Но и у семплов есть свои преимущества. Алгоритм вычисляемого звука приходится изобретать, тщательно выверяя все его потенциальные характеристики, прежде чем он станет действительно хорошим. А семпл хорошего звука достаточно просто записать, и он тут же готов для использования. Кроме того и разнообразных семплов в интернете полно. Особенно это касается звуков ударных инструментов.
Итак, собственно с этого момента я начинаю свой рассказ.
Что представляют собой семплы? Семплы, это кусочки музыки, длящиеся 5-10 или чуть более секунд, они находятся в файлах формата WAV, и, пользуясь редактором «Wave Editor», эти кусочки можно редактировать, придавая им подходящий для использования вид. Можно, в частности, продлевать короткие звуки вокала так, что они будут звучать долго.
Вокал особенно актуален для меня, поскольку хорошего вокального звука математическим путём мне пока получить не удалось. Есть звуки фортепьяно, скрипки, аккордеона, трубы, колокола и струны, но вот звуков вокала или органа, пока в ассортименте Пианолы нет.
С другой стороны, и вокал, и орган, и хорошая труба, и много ещё подобных семплов доступны, и как бы напрашиваются на реализацию в парадигме Пианолы. Но возможно ли сделать это?
Как можно использовать семплы в программе Пианола? Просто проигрывать их в нужных местах? Или накладывать их звук на звук нот, исполняемых Пианолой, это легко реализуемый вариант - звуки Пианолы накапливаются в буфере, и в том же буфере поместятся и ноты семпла.
Ну, хорошо, пусть так и будет.
Вопрос второй. Как обозначить ввод семпла в нотной строке?
В синтаксисе Пианолы имеется один неиспользованный знак, это вертикальная черта | - пусть она указывает на начало семпла, и пусть она же в нужном месте обрывает его звук. В результате у нас получаются скобки такого вида |CDEFGFBc| - играется обычная гамма, и на её звуки будут накладываться другие звуки - шум моря, например.
А если вместо нот поставить знаки пауз? Тогда мы услышим просто шум моря. Вроде бы, должно получиться неплохо. Но это пока только вставляемый фрагмент, а хотелось бы превратить этот фрагмент в настоящий семпл - в ноту, которую можно было бы исполнять звуком более высоким или более низким, а не обязательно в точности на той частоте, на которой этот семпл был записан.
Вопрос третий. Откуда я буду брать эти фрагменты, эти WAV кусочки звука? Как программа, проигрывая строку, поймёт, какой именно файл она должна прочитать и использовать?
Сделаем так - создадим в текущем каталоге папку под названием «семплы» и поместим наши WAV-кусочки туда, а чтобы они не перепутались, дадим им числовые номера, то есть, назовём наши файлы 1.wav, 2.wav и так далее, вплоть до 99.wav.
Итак, мы теперь можем выбирать нужный нам файл из папки «семплы» по его номеру - номер этот мы будем указывать вот так:
|23~~~~~~|13 F# - здесь 23 это номер читаемого файла, следом идут 6 значков тильда, они означают паузы, 13 это номер семпла, в который мы поместим амплитуды звука, преобразовав звук из стерео в моно-формат (моно формат для дальнейшего использования более удобен).
Заключающий знак F# - это нота, с частотой которой наш семпл №13 будет в дальнейшем связан. Дальнейшее, это уже сущие пустяки, заведём музыканта Qs, который будет проигрывать ноты, а чтобы он знал, какие семплы для проигрывания нужно использовать, будем указывать их номера значками s1, s2 … s13 - в программе будет предусмотрен набор из 13-ти семплов, непосредственно доступных для проигрывания, и ещё 10 подобных наборов, хранящихся в файлах S.wav, S1.wav - S9.wav.
Как Вы видите, начальные усилия программиста направлены вовсе не на программирование, а на продумывание структуры и синтаксиса тех добавлений в программу, которые он хочет получить. Синтаксис использования семплов у нас будет такой:
s1 Qs CEGc# s13 CEGc# - ноты До,Ми,Соль и до# тут будут исполнены сначала звуками семпла №1, а затем звуками семпла №13. Если в этих семплах записан вокал, то наша последовательность нот будет исполнена разными голосами.
Практическая реализация задуманного, это, как говорится, дело техники. Вот, например, строка, содержащая пробный текст:
|i Qs<s7C:2Es10GDFAEGB>EGc;FGd^^ >H2s13B&GE^ba&<<<9H3k1G~:H*s7B~!
Знак |i считывает набор семплов из файла S.wav, семплы №7 и №10 в этом наборе содержат вокал, а семпл №13 содержит проигрыш звуками трубы. В результате Вы слышите хоровое пение, его создают аккорды, затем - пение голосом №10, и потом - звуки трубы, на которые накладывается одиночный вокал.
Прослушать эту экспериментальную запись можно тут - https://disk.yandex.ru/d/H1Hph4hKOjEVpg
В программе «Пианола_М» имеется свой собственный вокал, для создания этого звука семплов не требуется, вот только на звук человеческого голоса он не очень похож. Хотя хоровое пение аккордами для него тоже возможно. Пример исполнения с использованием собственного вокала Пианолы можно послушать тут - https://disk.yandex.ru/d/K2iD4WYkTQwPaQ
Завершая свой рассказ, я хочу сказать, что программисту и на пенсии не скучно. Умение и любовь к творчеству всегда помогают делать очень интересные, и даже необычные вещи. В какой бы области искусства, науки или техники Вы бы ни трудились.
__________
20.05.2025
Свидетельство о публикации №225052000923
Дмитрий Кальянов 21.05.2025 14:03 Заявить о нарушении
Дело в том, что на работе меня ценили за мою оригинальность, и предоставляли некоторую свободу творчества, которой я с удовольствием пользовался. То есть, рабочий процесс для меня всегда был удовольствием. Помню, возвращался на дачу на электричке, и так увлёкся черчением на миллиметровке какой-то конструкции, что прозевал свою остановку, выскочил на следующей, и понял, что оставил в поезде свой рюкзак с детским питанием. Я в то время неплохо бегал, и побежал прямо по железнодорожному пути до следующей станции, и затем до депо. Но рюкзака в поезде не обнаружил - его кто-то уже спёр.
Такие вот были приключения ))
Спасибо!
Дмитрий Маштаков 21.05.2025 14:50 Заявить о нарушении
Дмитрий Маштаков 21.05.2025 14:55 Заявить о нарушении
Дмитрий Кальянов 21.05.2025 15:54 Заявить о нарушении