Многослойная музыка в программе Пианола

   Программа «Пианола», недавно усовершенствованная в таком плане http://stihi.ru/2024/05/18/2567 получила дальнейшее развитие. Это было интересным техническим решением, и о нём я сейчас расскажу.

   Запись нот в мнемонической форме делается в рабочей строке «Пианолы», эта строка показывается в окне программы, и с ней ведётся вся основная работа. Кроме рабочей строки имеются и другие строки, всего их 50, и к каждой из них прилагаются префиксы, или короткие строки-приставки. В них цифрами указывается на те установки, которыми начинается каждая строка.
   Это характер исполнения (легато и др.), длительность нот, номер октавы, число диезов или бемолей в ключе, и темп исполнения. Префиксы не видны, но они всегда сопутствуют своим строкам. При выводе нот во внешний файл, префиксы показываются перед нотной строкой, отделённые от нот вертикальной чертой:

{префикс| строка с обозначениями нот }

   Программа «Пианола» рассчитана на одноголосие – записанные в строках ноты исполняются одиночными звуками в том порядке, как они записаны, и в порядке следования строк. Расширенный мнемонический язык имеет средства для создания двухголосия и аккордов в партиях для двух голосов http://stihi.ru/2024/04/18/2535 что превращает «Пианолу» в своеобразную музыкальную шкатулку с приятным звуком фортепьяно. Звук этот создаётся численным путём по довольно быстро действующему алгоритму, не позволяющему, правда создавать никаких нюансов, кроме как регулировки высоты и громкости звука.

   Следующим шагом явилось добавление педали и инструментов со звуком, отличным от фортепьянного - это Виола, аккордеон, труба, звук струны и колокол, звучащий на разных частотах с двумя тембрами. Это позволило улучшить звучание музыкальной шкатулки, сделав из неё подобие небольшого ансамбля, подходящего для озвучивания не очень длинных пьес.
   Вместе с тем усложнился и мнемонический язык, а написанные с его помощью конструкции стали несколько громоздкими, и менее понятными для чтения, в сравнении с простым одноголосием. Все эти трудности связаны с последовательным принципом интерпретации знаков нотной строки – одна нотная строка, как одна линеечка на нотном стане, её сложно нагрузить разными событиями, происходящими не последовательно, а одновременно.
    Проблема кажется сложной, однако, как оказалось, её можно очень изящно решить, даже не выходя за рамки алгоритмической структуры «Пианолы» с её уже имеющимся и сугубо последовательным принципом обработки нотных знаков. Проблема решается расслоением нотных строк – 50 имеющихся нотных строк расслаиваются на 8 независимых друг от друга слоёв.

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

   Следующий режим, это режим попеременного звучания. Если на кнопке совмещения написано «---», а на кнопке числа слоёв стоит 1, то звучат по очереди слои 0 и 1 строки 0, затем слои 0 и 1 строки 1 и так далее.

   Наиболее интересен режим совместного звучания «===», в этом режиме слои от нулевого до выставленного звучат одновременно, а если ноты звучащих слоёв имею разную протяжённость по времени, то звук в каждой строке синхронизируется по началу строки, а продолжается, ориентируясь на слой с более длительным звучанием.
   Реализации совместного звучания помогает ряд буферов, в которых звук накапливается. В буфер ArM семплы звука записываются непосредственно, этот буфер имеет переменную длину и подстраивается под ритм счёта. Иными словами, он работает по тактам. Его функционирование подробно разбирается тут - https://proza.ru/2024/04/08/240

   Второй буфер ArB тоже был в программе «Пианола», он содердал несколько тактов, но сейчас от сделан существенно длиннее – рассчитанный на длительность 15 секунд, в режиме совместного звучания он сначала накапливает семплы, приходящие от нулевого слоя, затем, методом сложения с равновесной громкостью, присоединяет к ним семплы, приходящие со слоя 1, 2 и т.д.
   На слое, номер которого выставлен, процесс заканчивается, и в работу включается буфер ArD. Маленький по размеру, он разгружает буфер ArB, читая из него семплы и сбрасывая их в звуковой файл. Некоторое количество семплов после разгрузки в буфере ArB остаётся, но это лишь незначительно уменьшает его вместимость.
   Далее переходим к следующей строке и процесс чтения её слоёв с синтезом музыкального звука продолжается. Когда мы доходим до последней занятой строки, в работу включается буфер ArC, который окончательно разгружает буферы ArM и ArB и организует небольшую паузу в окончании записи.

   На иллюстрации показаны осциллограммы звука нот тестового файла. Звук был получен в режимах одиночного звучания слоя 0, слоя 1 и совместного звучания обоих слоёв. В тесте прозвучали две строки, окончания строк показаны красными черточками. Слои первой строки имеют разную длину, недостающий звук от нулевого слоя первой строки трактуется как пауза, а следующие затем слои второй строки совмещаются своими началами. Добавленный в слой 1 первой строки звук шести нот b (нота ля второй октавы) показан на осциллограммах жёлтым.
   Тестовый образец имел такой вид:

{Имя мелодии}N1
 1  {03420 0|CDE ^DEF ^                }
 1  {13420 0|>agfedc<^>bagfed ~bbbbbb  }
 2  {03420 0|EFG ^FGA ^                }
 2  {13420 0|>Bcdefg<^>cdefga ~        }
,,,

  Пометка N1 после названия мелодии указывает на то, что в файле имеются слои 0 и 1 (их номера также указаны в первых позициях префиксов). По этой пометке компьютер понимает, как нужно вводить строки файла – при пометке N0, или если пометка отсутствует, введутся не две строки с двумя слоями, а 4 строки нулевого слоя.
  Чтобы вывести файл в таком же виде, нужно, во-первых, кнопочкой рядом с именем файла указать на особый характер вывода, а на кнопке числа слоёв поставить цифру 1. Без указания на особый характер вывода будут выведены только строки указанного слоя, и выведены они будут в обычном для «Пианолы» виде. Таким способом многослойные файлы можно разделять по слоям.

  Обычные файлы можно тоже соединять вместе или присоединять к многослойному файлу – для этого мы пользуемся не кнопкой ввода, а кнопкой «ввести и совместить». Кроме того, как и в обычной «Пианоле» имеется кнопка «добавить», она добавляет  строки вводимого файла, располагая их позади ранее введённых.

   Новые возможности программы необычны и очень интересны, с ней легче работать и при создании партитур – партитуры создаются из того слоя, который указан, а имея несколько слоёв одновременно, легко отрабатывать и проверять ритмику, проигрывая строки разных слоёв поочерёдно или совместно.
   Новая программа получила и новое имя – теперь она называется «Пианола_М», с намёком на её многослойные свойства. Должен сказать, что результат модернизации несколько ошарашил меня, настолько хорошим и неожиданным он получился. Я думал, что не справлюсь с этим делом. Но нет, справился за несколько дней усердной работы. Думаю, что удача явилась следствием того, что программа «Пианола» была изначально хорошо структурирована, на плохой структуре такого бы не получилось.
   В общем, я доволен, даже и передать не могу как. ))

_________
7.06.2024 


Рецензии