4. Аккорды. Громкость. Многоголосие в буфере

   В предыдущих статьях мы познакомились с работой «Пианолы_М», обсудили её структуру, связанную со строками и с хранением в них записей нот в мнемонической форме. Поговорили о двух режимах работы - ознакомительный режим Help, в котором имеются примеры и рассказывается обо всех тонкостях работы с программой, и рабочий режим, с клавиатурой и табло из кнопок, вводящих символы в нотную строку.
   Теперь мы поговорим об организации накопления звука, уделив особое внимание аккордам.

   Компьютерная программа отнюдь не музыкальный инструмент, она не может создавать два разных звука одновременно. Не то, что в принципе не может, но ей это трудно. Гораздо легче создавать одиночный звук - заданной частоты и длительности, с характерным для выбранного инструмента тембром - вот этот звук начался, быстро набрал полную силу, затем стал постепенно затухать и в нужный момент оборвался.
   Оборвать звук тоже не так уж просто - если сделать это резко, то в музыкальной записи будут слышны хлопки, будто кто бьёт в ладоши в конце каждой ноты.

   В общем, вы поняли. Если мы хотим изобразить звук аккорда, то сначала получаем звук первой его ноты, и, с начала до конца, во всю её длительность, записываем семплы полученного звука в некий числовой массив - буфер, достаточно большой, чтобы в него поместилась не одна, а, так скажем, несколько, или даже несколько десятков подобных нот.
   
   Нотная запись, создающая аккорд, выглядит очень просто. Нужно между нотами, составляющими аккорд, поставить двоеточия.
   На иллюстрации показано, как программа создаёт аккорд из пяти нот – сначала в буфер записывается нота До, при этом записываемые семплы считаются и счётчик буфера увеличивает своё значение, по окончании синтеза семплов программа вернётся к чтению строки, найдёт там значок двоеточия и поймёт, что ожидается нота аккорда, по получении этой ноты она сдвинет счётчик на место начала предыдущей ноты (вы помните? это первое число на информационной строке), и начнёт семплы ноты записывать не в продолжение записи, а присоединять к семплам предыдущей ноты. Так, как это показано на иллюстрации. Точно так же присоединятся семплы и следующих нот аккорда.
   Счёт присоединяемым нотам ведётся, присоединяются они не абы как, а в пропорции – так, чтобы вклад каждой ноты в аккорд был одинаковым, и так, чтобы общая громкость нот сперва немного увеличивалась, а потом постепенно спадала до громкости, получаемой от двух нот. То, что амплитуда звука растёт именно так, легко проверить, если составить аккорд из одинаковых нот (см. иллюстрацию).

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

ГРОМКОСТЬ ОДИНОЧНЫХ НОТ И НОТ АККОРДА

   А как же в действительности сочетается громкость одиночных нот и нот аккорда? Должен сказать, что при исполнении вживую, что пальцами на фортепьяно, что смычком на струнах, громкость звука ведёт себя обычно точно так, как мы её изобразили в нашей программе.
   И в самом деле, аккорд на фортепьяно извлекается не движением пальцев, а движением кисти. А пальцы – они мягкие, усилие кисти распределяется между ними, поэтому каждая нота, взятая в аккорде, звучит тише, чем взятая отдельно. И это совершенно естественно в звуке, исполняемом вживую.
   Конечно, если пальцы держать при исполнении аккорда жёстко, то звучать аккорд будет громче. Ну, «напрячь пальцы» мы и в своей программе можем – напишем одиночную ноту и аккорд вот так:

Ch7C:GhC  и аккорд зазвучит среди одиночных нот явно громче.

   Значок h с цифрой 5-9 за ним, увеличивает громкость нот, а следующий одиночный значок h возвращает громкость на прежний уровень. Цифры 4-1, напротив того, будут уменьшать громкость звука.
   Действуют указания h на протяжении текущей строки. Они могут дополнительно добавлять, или убавлять громкость, задаваемую основным указанием H – эта громкость устанавливается с помощью цифр точно так же, но она не сбрасывается в начале каждой строки (в отличие от h), а установленные в предыдущей строке (или слое) значения громкости переходят на следующую строку (или слой).

   Аккорд C::E:G:c:e из пяти нот, отличающийся тем, что первое двоеточие в нём сделано двойным, будет исполнен как арпеджиато. При этом, каждая последующая нота будет звучать в нём слабее, и длительность его будет увеличена. Цифра 1-9 после двойного двоеточия увеличит временное расстояние между звуками арпеджиато.
   В программе есть возможность исполнять арпеджиато и нотами равной громкости. Режим этот подробно описан в разделе Help.

АККОРД ИЗ НОТ РАЗНОЙ ДЛИТЕЛЬНОСТИ

   Последняя нота аккорда определяет и его общую длину, и длину посленотной паузы. Если предыдущие ноты последовательно короче одна другой, например, так C1:E7:G^ тогда мы предсказуемо услышим, как звуки последовательно убывают из аккорда.
   Если же мы напишем аккорд так C8:E1:G^ тогда результат будет несколько неожиданным – после короткого общего аккорда мы заметим, тоже короткую, посленотную паузу, заполненную звуком последней ноты G, затем явственно услышим достаточно долгое С на фоне G, и, наконец, услышим ожидаемое завершение звука G.

   В плане наслоения звука интересен пример на иллюстрации:

<C:>>h1C:-hF.:-G.:-A.:-c   здесь одиночная нота продолжается звуками последующих отрывистых нот. Звук их накладывается на долгий звук первой ноты, который можно видеть в посленотных паузах.
   Наложение создаётся символами :- следующая за ними нота не вводится на пустое место, а вводится, складываясь с семплами, находящимися в буфере. Однако, если семплы в буфере уже кончились, то смысла в такой записи никакой нет. Поэтому перед последней нотой нашего примера можно обойтись и без указания :- поскольку результат будет тот же самый. Слушаем тут https://disk.yandex.ru/d/kdBlwjxLblRs8A

АККОРДЫ С ЗАДАННЫМ ЧИСЛОМ НОТ.

   Аккорд C:E:G:c:e можно записать иначе, вот так C:4EGce
Цифра 4 указывает на число нот, присоединяемых к первой, опорной ноте аккорда. Такая запись удобнее тем, что она короче, кроме того и последующие последовательности нот начинают интерпретироваться как такие же аккорды. Можно просто записать DFAda и это будет новый аккорд.
   Для аккорда из меньшего число нот, некоторые ноты можно повторить, и они тогда будут звучать громче. Знаком : можно добавлять к аккорду дополнительные ноты. В целом, аккордная запись может выглядеть вот так:

Z1#>5 E:1GEGD#F;\B/ <E;GAc; >G;B:dG;>FE<F;A <E7'     https://disk.yandex.ru/d/QuawtGGu21p2FA

   Мелодия «Ой, цветёт калина в поле у ручья» здесь ведётся нижними, опорными нотами аккордов. Введённый режим аккордов с двумя нотами прерывается и вновь возобновляется знаками ; а если на таком знаке прерывания второй ноты нет, тогда исполняется то, что накопилось, то есть одиночная нота. В начале строки устанавливается тональность один диез и убыстряется темп.
   Запись музыки с использованием аккордов проста и удобна, мнемоника аккордов построена так, чтобы в строке не требовалось бы для этого лишних знаков. Запись музыки с аккордами получается весьма компактной.
   Значок ; в начале строки настроен на аккорд из двух нот, а значки I J L сбрасывают режим аккорда. Поэтому строка C;EDFI>fedc будет озвучена двумя аккордами в левом динамике с наложенным проигрышем 4-х нот в правом динамике.

   В буфере можно соединять не только ноты аккордов, но и мелодии разных голосов. И хотя в программе «Пианола_М» для разных голосов предусмотрены слои, но и возможностями соединения звуков в буфере тоже пренебрегать не стоит.
 
МНОГОГОЛОСИЕ В БУФЕРЕ

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

   Идея получения многоголосия в одной строке с использованием буфера проста – сперва мы записываем в буфер, например, аккомпанемент, а потом устанавливаем индекс записи на начало буфера и проходим по буферу ещё раз, добавляя в него звуки мелодии. Можно изловчиться, и пройти по буферу и в третий раз. Вот пример такой записи:

^@h1A7>GhFABc<a7>gfed7c'<c^BJ\~~A:2c:fAcf; ^c:1fcf;^B:2dfBdfL~^<F7A7G7S
   Тут значок J возвращает индекс буфера в начало и организует запись семплов для левого динамика, поэтому аккомпанемент звучит оттуда, а значок L ещё раз возвращает индекс в начало и добавляет длинные ноты аккомпанемента в оба динамика. S сбрасывает буфер, однако, если мы проигрываем только одну строку, или соединяем, создавая музыку, два или более слоёв, значок S излишен – буфер сбрасывается при переходе на другой слой автоматически.
   В приведённой записи поместилось только 4 такта нот, а в нотной строке было 7 тактов. Поместились не все такты, и это неудобно. Да и со знаками выразительности сложно - всё, что удалось, это сделать вступительные ноты первого такта потише. А уж с замедлениями темпа вообще проблемы – при каждом возвращении в начало буфера начальный темп приходится восстанавливать.
   Тем не менее, установив 4 бемоля на кнопке над нотной строкой, эту запись можно проиграть, и тогда вы услышите начало «Сентиментального вальса» П.И.Чайковского https://disk.yandex.ru/d/RVB0GztB1Qdd0A 
   Музыка-то достаточно простая, но вы видите, сколько сложностей с ней получается.
   Однако если разнести ноты по двум слоям, не говоря уже о трёх, то ровно никаких проблем с её исполнением не будет – и нотные строки поместятся целиком, и для знаков выразительного исполнения останется уйма места. Программа «Пианола_М» позволяет делать это.

__________
12.01.2025

продолжение http://stihi.ru/2025/01/20/7914


Рецензии