Трели и мелизмы в программе Пианола

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

  Однако естественно, что как всякая вновь созданная вещь, проект нуждается в обкатке - удобно ли? Что делается легко, а что сложно? Какие отличия есть в сравнении с другими реализациями синтеза музыкального звука? И что, в конце концов, с помощью Пианолы и Трио можно делать?
  Трели и мелизмы в программе Пианола - совершенно утилитарный раздел, о котором и не стоило бы отдельно говорить, но я хочу не только продемонстрировать трели и мелизмы, но и хочу показать, как создаётся музыкальная запись с их использованием. От самого начала - от нот, и до самого конца - до звукового файла.
  В соответствии с этим, статья делится на 2 раздела - трели и мелизмы в программе Пианола, и пояснение того, как создаётся звуковой файл, содержащий простенькую мелодию. Одноголосие. Пример того, как создаётся файл с многоголосием, будет рассмотрен в следующей статье.
  Сразу укажу на запись - https://yadi.sk/d/WJfRiHhds8rnX
 в ней сначала звучит нота Ля, потом, от этой же ноты - разные виды трелей, предусмотренные в программе. Потом - опять нота Ля и разные виды мелизмов, предусмотренные в программе. И, в конце, простенькая мелодия с мелизмами. 
 
 
   ТРЕЛИ И МЕЛИЗМЫ В ПРОГРАММЕ ПИАНОЛА

   Трели и мелизмы в программе - не совсем то, что понимают под этим музыканты. Возьмём простейший пример - форшлаг. Он записывается маленьким нотным знаком перед знаком последующей за ним ноты.
   А как форшлаг исполняется?
   Если знак форшлага перечёркнут косой чертой, то это - короткий форшлаг,  он исполняется за счёт длительности предшествующей форшлагу ноты или паузы, причём длительность его звучания не оговаривается. Звучит коротко, но насколько коротко, это зависит от желания исполнителя.
   Если знак форшлага не перечёркнут, это - длинный форшлаг, он звучит в половину длительности последующей ноты, или в две трети её длительности, если знак этой ноты с точкой. А собственное звучание ноты за форшлагом, соответственно укорачивается.
   И вот теперь скажем, что форшлаг может быть не простым, а сложным - он может быть указан несколькими мелкими нотными знаками. Исполняется сложный форшлаг точно по такому же принципу, что и одиночный.

   Но как быть в программе? В ней запись нот в строке мелкими знаками не предусмотрена.
   Одиночный форшлаг легко ввести просто короткой нотой.
   Возьмём, например последовательность нот Фа-Соль-Ля. Пусть это будут ноты половинной длительности. Если для нот установлена длительность 1/4, то знаки нот половинной длительности в программе записываются со знаками продления - с крышами после нотных обозначений - F^G^A^. Добавим в эту запись короткий форшлаг от G к A, вот так - F^G^>>G<<A^ здесь каждый знак > или < уменьшает или увеличивает длительность звучания нот и пауз вдвое. Сколько же времени будет звучать вся цепочка нотных звуков? Давайте считать - 2/4 и 2/4 и 1/16 и 2/4 = 6.25 четвертей.
   Посмотрите на рисунок, там справа снизу приведён фрагмент строки с этими нотами. При запуске строки на прослушивание голубенькая стрелочка двигается от начала строки к курсору, останавливаясь на нотных знаках. Ноты звучат, мы их слышим, а счётчик считает четверти. Видите, он насчитал столько же, сколько и мы - 6.25.
   А должно быть 6 - мы должны сократить длительность ноты, предшествующей форшлагу. Как это сделать?
   Помимо знаков продления или укорочения длительностей вдвое и вчетверо, в программе предусмотрена и более плавная градация - G4 G3 G2 G1 для постепенного уменьшения длительности звучания, и G6 G7 G8 G9 для увеличения длительности звучания.
   Запишем так - F^G8>>G<<A^ и счётчик покажет 6.
   Аналогичный длинный форшлаг, согласно правилам, будет таким F^G^GA то есть, последовательность нот, а не форшлаг вовсе. Общая длительность звучания нот, по прежнему 6.

   Всё так просто, если нота в мелизме одна. Но если нот в мелизме несколько?
   А всё так же просто и остаётся - мы вмещаем весь мелизм в длительность одной ноты. Назовём эту ноту опорной. Например, хотим мы назначить мелизм, указанный в нотах на рисунке на ту опорную ноту, с которой он начинается, пишем строку назначения - m$00+200+2$
Здесь 00 - опорный тон, +2 это 2 полутона вверх, 00 - опять опорный тон, +2 опять 2 полутона вверх.
   Мелизм назначен. Для того, чтобы его реализовать, ранее опорной ноты пишем #m а затем и опорную ноту соответствующей длительности. Так, как в примере на картинке -

  m$00+200+2$ /ECE m#>GG<F#AsF#lG ECE m#>GG<F#AsF#G

здесь общепринятые обозначения нот, некоторые из них с диезами, слежа вверх - повышение на октаву, s - стаккато, l - легато. Первая нота Соль играется как мелизм с общей длительностью звучания 1/8, а вторая нота Соль играется как обычная 1/8.
   Кроме назначаемых, в программе есть стандартные мелизмы m, m0, m1 ... m9 Все их можно прослушать в записи. Но прежде мелизмов в записи идут трели.

   Чем трель в программе отличается от мелизма?
   В мелизме длительности составляющих его звуков растягиваются или сокращаются в соответствии с длительностью опорного тона. Трель исполняется звуками определённой длительности (обычно 1/16-ми, если на длительность не указано особо), вне зависимости от длительности опорного тона. Сколько звуков поместится, столько и будет (длительность звуков, составляющих трель, слегка корректируется, с тем, чтобы на общую длительность трели приходилось целое число звуков).
   Трель назначается аналогично тому, как назначается мелизм, с тем отличием, что длительность звуков трели может быть указана отличной от 1/16. Чтобы указать на это, в строку назначения можно добавить цифру (от 1 до 9). Например, так - 
      
 t$00__16124$ 

посмотрим, что за трель тут назначена? 00 - тон опорной ноты, два подчёркивания означают паузу, 16 - тон на 16 полутонов выше опорного, то есть октава плюс терция вверх, 12 - тон октавой выше основного.
   Вы видите, вверх можно забираться очень высоко, а вниз - только до -9. Знак плюс можно не писать, а ставить на его место ноль или пробел.
   Заключительная цифра 4 указывает на количество 1/64-х длительностей, приходящихся на исполнение каждой ноты трели. Конкретно 4 обозначает для этих нот длительность в 1/16, 1 соответствует 1/64, 2 соответствует 1/32, 8 соответствует 1/8, другие цифры дают промежуточные значения для длительности звуков трели. Но, как уже говорилось, задаваемая таким образом длительность, затем слегка корректируется.

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

 1  {*0410| A ~tA ~t0A ~t1A ~t2A ~t3A ~t4A ~t5A ~t6A ~t7A ~t8A ~t9A t$00__16124$~t#A ~~~~}
 2  {*0410| A ~mA ~m0A ~m1A ~m2A ~m3A ~m4A ~m5A ~m6A ~m7A ~m8A ~m9A m$-4__1612$~m#A     }

здесь 410 указывает на первую октаву, половинные ноты и легато. Тильда, при установленной половинной длительности нот, указывает на целую паузу. Остальные обозначения Вы знаете.

   Всё прекрасно, а нельзя ли сделать так, чтобы все ноты были с трелью. Мы писали бы ноты без лишних указаний на трель, а трель бы сама разливалась соловьём?
   Можно. Укажите на трель дважды t5t5 и получите сквозную трель на все последующие ноты, вплоть до окончания строки, или до указания на другую трель или мелизм, или до одиночного значка t, который сквозную трель оборвёт, но сам при этом собственную трель не задаст.
   И всё в точности то же самое в отношении сквозных мелизмов.

   Предвижу, что Вы могли бы высказать следующее - "Что-то не нравятся мне Ваши стандартные трели и мелизмы, нельзя ли мне самому сделать и использовать свои стандарты, в дополнение к возможности назначать t# и m#?"
 - Да, для трелей и мелизмов с номерами 1-7 это сделать можно.

   Давайте опять посмотрим на рисунок и на меню программы. В меню программы есть пункты LOAD и SAVE.
Нажмите Enter на поле SAVE - в Вашей папке появится файл CONTENT.P_L в котором находится контент меню программы Пианола. Откройте этот файл с помощью Блокнотика. Ниже контента меню Вы увидите строки стандартных трелей с номерами 1-7 и ниже - строки стандартных мелизмов с номерами 1-7. Вот они -

==TRELL=MELIZM==
$00-1$
$00+1$
$00+2$
$00+200-1$
$00+200-3$
$0012+219$
$00+2+4+2+4+5$
$00+2+4+5$
$00+2__+4+5__$
$00+2+4__$
$00+4+712$
$00+3+812$
$00+5+912$
$00+4+712+4+71216+7121619$

  Вы можете изменить содержимое этих строк по своему усмотрению, изменения сохранить и файл закрыть.
Захотите работать со своими стандартными трелями и мелизмами - нажмите Enter на поле LOAD, и Вы загрузите их вместе с контентом меню.


   СОЗДАНИЕ ЗВУКОВОГО ФАЙЛА ПРОСТОЙ МЕЛОДИИ С МЕЛИЗМАМИ

   Начну свой рассказ от нот, вон они, на рисунке, пример мелизма, найденный в интернете.
   Запускаем программу Пианола, двигаемся с помощью стрелочек на нижнюю строку, и дважды нажав F8, переходим в режим записи нот - RECORD. И, глядя в ноты, и нажимая клавиши верхних рядов клавиатуры, записываем ту строку, которую Вы видите на картинке. В начале строки с помощью Shift/X пишем "m" и назначаем мелизм.
   Чтобы не переходить в режим TEXT, а оставаясь в режиме RECORD писать некоторые символы, нужны некоторые "хитрости", о них подробно написано в описании программы. Для набора цифр теми клавишами, которые являются звучащими, нужно нажимать их одновременно с клавишей Alt. Латинские Z X C с шифтом и без него также вызывают появление некоторых символов в строке. Чтобы вызвать появление слеж, нужно нажимать клавишу Таб. Для знака диез нажать Ctrl/-, вот только для знака плюс такого не предусмотрено, но в строке назначения мелизма Вы можете заменить его нулём.
   Вы всё записали, но ещё не окончательно запомнили - нажмите Home.

   Замечательно - Вы всё записали и запомнили, и хотите проиграть. Прогоните курсор вправо от записи, нажмите "v" - появится голубенькая стрелочка, нажмите "m" - стрелочка начнёт двигаться от начала записи к курсору и проигрывать ноты. Если что не так - исправляйте, и вновь проигрывайте ноты. Чтобы вернуться к первоначальному варианту нажмите Ctrl/Home. А напоследок нажмите Home, чтобы окончательно всё запомнить.

   Давайте, не ограничимся одной строкой, а продолжим музыку, поднявшись на кварту вверх. Прежде всего, нам нужно указать программе, что она должна добавить к записи одну строку.
Нажмите Ctrl/End, и Вы увидите, что счётчик строк изменился - он был *1(1), а стал *1(2).
   Вторая строка появилась, запомним первую строку в буфере - нажмём F7. Появится то бледное повторение строки, которое мы видим на рисунке. Теперь нажмём Pgdn и перейдём на вторую строку. Вы видите, она пуста.
   Нажмём Shift/F7 и скопируем строку из буфера. Посмотрите на счётчик - 2(2), а звёздочки нет. Это значит. что фактически строка ещё пуста, мы её только приготовились заполнять неким содержимым. Чтобы проверить, что строка всё ещё пуста, можно нажать Pgup и Pgdn, и убедиться в этом.
   Итак, нажав Shift/F7, скопируйте в видимую строку содержимое буфера, и запомните его, нажав Home. Теперь это содержимое никуда не пропадёт.

   Повторное назначение мелизма нам не нужно, мы его удалим. А чтобы подняться на кварту вверх, добавим к первой слеже ешё такую - /5. Запомним написанное, нажав Home. У нас получились такие две строки -

   m$00+200+2$ /ECE m#>GG<F#AsF#lG ECE m#>GG<F#AsF#G
           //5 ECE m#>GG<F#AsF#lG ECE m#>GG<F#AsF#G

   Проиграем обе строки вместе, нажав Shift/F6.
   Теперь неплохо было бы написанное запомнить.
Поднимаемся стрелочками к правому верхнему полю меню, латинскими буквами указываем имя файла - pesnja, и нажимаем Enter. Выйдете в папку, откройте файл pesnja.txt с помощью Блокнотика, посмотрите, как выглядит в нём сделанная Вами запись.
   Чтобы загрузить сохранённую запись, нужно указать имя файла на первом поле меню и нажать Enter. Надо иметь в виду, что строки записи после загрузки разместятся после строк, уже имеющихся. Даже если Вы только что вошли в программу, в ней уже имеется первая (пустая) строка. Если она Вам мешает, то после загрузки нужного Вам файла удалите её, нажав Del. Удалённую таким образом строку, независимо от того, была ли она пустой или нет, можно вставить, нажав Ins.
   
   Первую часть работы мы проделали, займёмся теперь озвучиванием мелодии.
   Переводим курсор на то поле, на котором написано VEL 23000. Поясню, с какой стати там появилась такая надпись.
   Даже если звучание мелодии на Пианоле отлажено, и темп нас удовлетворяет, это не значит, что темп мелодии в звуковом файле окажется точно таким. Несмотря на то, что программа при запуске согласует длительность четвертей со временем полсекунды, взятым по таймеру, практически темп подачи звука четвертями может оказаться несколько другим, и то, что нам нравилось в звучании компьютера, может не понравиться в звучании файла. От чего это зависит - не совсем понятно, отвлекается ли компьютер на выполнение других программ, сказывается ли режим эмуляции при работе через Дос ящик? Но разница иногда получается ощутимая. Можно не заморачиваться на этой проблеме, а просто указать программе, чтобы она готовила файлы с длительностями нот, рассчитанной на другой темп раздачи.
   Темп раздачи файлов которые готовит программа озвучивания ТРИО равен 32000 семплов/сек. И Пианола, если ничего специально не указывать, подготовит файл к такой скорости раздачи. Но я, изучив особенности конкретно моего компьютера, знаю, что это не будет хорошо, и делаю на этом самом поле надпись VEL23000 и нажимаю Enter. Программа подаёт звуковой сигнал, значит, она мои указания восприняла.

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

   На поле опций мы попадаем с поля, на котором написано VEL23000 нажимая стрелочку влево.

Поле опций выглядит так  tt-ij-19--- а мы изменим его на  tt-ij-19--F и уйдём на нотную строку.
На нотной строке (в режиме RECORD ) нажмём Shift/F6 и после окончания процесса проигрывания обнаружим в папке с Пианолой файл TF.TXT это и есть файл партитуры. Если бы на поле опций указали бы F1, то название файла партитуры было бы TF1.TXT
  Вот первая страница файла партитуры, в которую я вставил строку: R=8 H=3 - указание на сценарий звука, по которому будет проходить озвучивание, и указание на громкость -

 1 ================= TF.TXT   VEL= 23000
  R=8 H=3
F= 659.260009765625  T1= 11270  T2= 229
F= 523.260009765625  T1= 11270  T2= 229
F= 659.260009765625  T1= 11270  T2= 229
F= 784  T1= 1437  T2= 0
F= 880.0103149414062  T1= 1437  T2= 0
F= 784  T1= 1437  T2= 0
F= 880.0103149414062  T1= 1437  T2= 0
F= 784  T1= 5635  T2= 114
F= 739.97998046875  T1= 11270  T2= 229
F= 880  T1= 11270  T2= 229
F= 739.97998046875  T1= 3450  T2= 8049
F= 784  T1= 11270  T2= 229
F= 659.260009765625  T1= 11270  T2= 229
F= 523.260009765625  T1= 11270  T2= 229
F= 659.260009765625  T1= 11270  T2= 229
F= 784  T1= 1437  T2= 0
F= 880.0103149414062  T1= 1437  T2= 0
F= 784  T1= 1437  T2= 0
F= 880.0103149414062  T1= 1437  T2= 0
F= 784  T1= 5635  T2= 114
F= 739.97998046875  T1= 11270  T2= 229
F= 880  T1= 11270  T2= 229
F= 739.97998046875  T1= 3450  T2= 8049
F= 784  T1= 3450  T2= 8049
 2 ============ 184000  184000  8
... дальше идёт вторая страница

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

  Полученная партитура предназначена для программы ТРИО. Сценарий развития звука под номером 8 имитирует звук фортепьяно. Сама программа ТРИО называется TRIO_A.BAS и запускается не самостоятельно, а из среды Турбо Бейсик. Но прежде чем запускать TRIO_A.BAS откройте этот файл с помощью Блокнотика, и посмотрите, что написано в начале файла. А там написано буквально следующее -

'============= TRIO.BAS
10 INPUT A$
   SELECT CASE MID$(A$,1,1)
    CASE "e"
      STOP
    CASE "o"
      A1$=A$ : IF LEN(A1$)=2 THEN A1$=MID$(A1$,2)+".wav"
      OPEN "B",#1,A1$ : GOTO 10
    CASE "c"
      CLOSE #1 : GOTO 10
    CASE "l"
      PRINT LOF(1),LOC(1) : GOTO 10
    CASE "s"
      SEEK #1,VAL(MID$(A$,2)) : GOTO 10
    CASE "p"
      PUT$ #1,MID$(A$,2) : GOTO 10
    CASE "g"
      GET$ #1,VAL(MID$(A$,2)),S$
      PRINT S$,"loc=";LOC(1) : GOTO 10
    CASE "h" 'put the head of wav file
      GOSUB 1000 : GOTO 10
    CASE "w" 'make wav sound
SEEK #1,44
 hhh=1 : VEL=32000 : A=FNSS3(0,0) : FF=1 : FF2=1 : II=2 : K=9
 FOR I=1 TO 2000  : M%=0 : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 20000  : M%=INT(4000*FNSS3(FF*260.74*1.5,K)) : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 500  : M%=0 : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 20000*II : M%=INT(4000*FNSS3(FF*FF2*260.75,K)) : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 1000  : M%=0 : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 20000  : M%=INT(4000*FNSS3(FF*260.73,K)) : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 500  : M%=0 : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 30000*II  : M%=INT(4000*FNSS3(FF*FF2*260.74/1.5,K)) : PUT$ #1,MKI$(M%) : NEXT I
 FOR I=1 TO 30000  : M%=0 : PUT$ #1,MKI$(M%) : NEXT I
GOTO 10

    CASE "z" 'make wav record - oZvuchivanie
SEEK #1,44 : VEL=32000 : FEF=0 : REF=0 : COF=1
  CALL MUZ1(-1) : CALL MUZ2(-1) : CALL MUZ3(-1)
 'OPEN "TF.TXT" FOR INPUT AS #11 : CALL MUZ1(1)
 'OPEN "TF1.TXT" FOR INPUT AS #12 : CALL MUZ2(1)
 OPEN "TF.TXT" FOR INPUT AS #13 : CALL MUZ3(1)

12 S$=INKEY$ : IF S$=" " THEN GOTO 10
  FEF=0 : REF=0 : PRECOF=0
  CALL MUZ1(0) : CALL MUZ2(0) : CALL MUZ3(0) 'go on please
  COF=PRECOF : IF COF=1 THEN M%=INT(FEF*1000) : PUT$ #1,MKI$(M%)
  IF REF=1 THEN 12
  GOSUB 1000 : CLOSE #1 : PRINT "Ok" : STOP

END SELECT : GOTO 10
'===========

Не пугайтесь, нас интересует только это -

 'OPEN "TF.TXT" FOR INPUT AS #11 : CALL MUZ1(1)
 'OPEN "TF1.TXT" FOR INPUT AS #12 : CALL MUZ2(1)
 OPEN "TF.TXT" FOR INPUT AS #13 : CALL MUZ3(1)

апострофы делают первые две строки неисполняемыми, а третья строка подключает файл партитуры TF.TXT к программе, третьего МУЗа то есть третьего участника трио. В принципе можно было избрать любого, сценарий звука фортепьяно есть у каждого. Если у Вас будет написано что-то не так, то поправьте - первые две строки должны быть с апострофами, а третья - именно такой.

  Теперь запускаем Турбо Бейсик, загружаем файл TRIO_A.BAS, по опции меню RUN запускаем программу на исполнение. Программа печатает знак вопроса, в ответ мы вводим or ( вводим, означает - печатаем or и нажимаем Enter). На новый знак вопроса вводим z.
То есть, в окне должно быть следующее -

?or
?z

дальше смотрим на появляющиеся в окне частоты и радуемся.
Программа кончает свою работу и печатает Ok.
Полученный в результате файл R.WAV можно прослушивать.
======================================================
Программу Пианола скачиваем тут - https://yadi.sk/d/5u-HJdxls6LKS
А программу ТРИО_A.BAS тут - https://yadi.sk/d/QvD6_C70rDQKo

внимание, программа Трио в настоящий момент модернизирована. Как работать с ней, подробно рассказывается тут - http://www.proza.ru/2016/06/19/581


Рецензии