Работа буфера в программе Пианола М

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

   Работа в Пианоле организована по строкам и по слоям - в слоях, принадлежащих одной строке, записываются разные голоса. Это могут быть голоса одного инструмента, или голоса нескольких инструментов. Музыка каждого слоя записывается в буфер_М, а когда запись начального, нулевого слоя, будет закончена, то семплы буфера_М сбрасываются в буфер_В, и начинается запись следующего слоя.
   Когда и этот слой будет записан, то его семплы тоже попадут в буфер_В, где они будут сложены с семплами нулевого слоя, а буфер_М будет очищен и подготовлен к следующей записи.
   Таким образом, в буфере_В образуется слоёный пирог, составленный из звуков первой строки. За этим слоёным пирогом следует такая же слойка от второй строки, затем от третьей, и так, постепенно, большой буфер_В наполняется звуками (см.иллюстрацию).
 
   Использование буфера даёт много преимуществ - звук в нём собирается по частям, и это удобно - можно сделать звук фортепьяно для правой руки на нулевом слое и прослушать его. Исправить, если этот звук чем-то не понравился. На следующем слое можно записать звук аккомпанемента, и тоже прослушать его отдельно. Затем перейти в режим соединения слоёв, и прослушать оба слоя вместе. Потом перейти к третьему слою.
   Так, постепенно, двигаясь по слоям, мы записываем музыку первой строки, а потом переходим ко второй и третьей.

   На иллюстрации показан порядок заполнения слоёв на примере исполнения первых четырёх строк прелюдии С.Рахманинова Соль мажор, опус 32 №5. Полученную музыкальную запись звучания этих строк можно прослушать тут -  https://disk.yandex.ru/d/fFHoHcofNgUA0A  а всё произведение целиком здесь -  https://disk.yandex.ru/d/LYdTvwZujrX6Yw

   Приступая к озвучиванию, прежде всего нужно определить число слоёв, которое мы будем использовать в своей работе. В прелюдии №5 мелодия ведётся правой рукой, а левая рука сопровождает её пятиолями, причём начальные ноты пятиолей удлинены - при исполнении пятиолей они удерживаются пальцем. Поэтому поместим эти удлинённые ноты в отдельный слой. Заодно и звучать они будут громче - с подходяшим акцентом: начало этих нот прозвучит громко, а дальнейший их звук будет притушен.

   Итак, для озвучивания прелюдии №5 мы будем использовать три слоя.
   Посмотрите на ноты первой строки, и на то, как они записаны символами на языке Пианолы, и как они распределены по слоям -

Q1H ~~ ~>^@3f(ze^d()!
Q1H1I P6@1rz5dgbgB.egbgB.zRP0 RR!
Q1H2I DEDE DEDE!

Мелодия в нулевом слое начинается после долгих пауз, и звучит она в самом конце строки, пятиоли исполняются между знаками z5 и z в стиле рубато и с использованием значков повторений r и R. Знак P6 создаёт крещендо, а знак P6 обрывает его. Педаль на пятиолях @1 в сравнении с педалью @3 первом слое менее глубокая, и, наконец, сопровождение слышится только из левого динамика (знак I задаёт его), а мелодия из обоих.
   Осциллограммы звука, полученного от слоёв 0, 1 и 2 приведены на иллюстрации в масштабе, сопоставимом с большим буфером_В, и видно, в какую часть буфера этот звук записывается.

   Большой буфер_В вмещает 1300000 семплов и рассчитан на 20 секунд звука (семплы следуют поочерёдно - один для левого динамика, второй для правого), он разделён чёрточками на 13 частей, по 10 тысяч семплов в каждой.
   Буфер_М, в который поочерёдно записывается каждый слой, имеет длину на 32000 семплов меньшую. И это принципиально - после заполнения, буфер_В разгружается порциями по 32000 семплов в каждой (порции эти показаны на иллюстрации красными чёрточками) и когда дело доходит до 38-й части, то выясняется, что она заполнена семплами не полностью, а только на четверть, и тогда разгрузка буфера прекращается, незаполненная часть (в ней находится остаток из 8000 семплов) сдвигается в начало буфера, а всё, что находилось сверху, обнуляется.
   Таким образом, буфер_В оказывается разгруженным - 37 порций семплов по 32000 в каждой, присоединились к нотной записи, а 38-я порция осталась в начале буфера. Семплы из буфера_М начнут записываться в буфер_В начиная с 8000-го семпла, а поскольку буфер_М меньше буфера_В, то для этой записи в буфере_В места заведомо хватит.

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

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

__________
23.02.2026


Рецензии