Синтез звука фортепьяно. Развитие сценария

  Звук фортепьяно, сценарий которого обсуждался в предыдущей статье -
http://www.proza.ru/2017/04/01/260 , получился неплохим. Из 16-ти пьес, озвученных к настоящему времени синтезированным звуком, 7 - являются чисто фортепьянными, и 5 - используют фортепьяно в ансамбле. Прослушать пьесы можно по этой ссылке - https://yadi.sk/d/poMxlrBuxendv
  Для большинства пьес характерно то, что низкие звуки играют роль сопровождающего аккомпанемента, они приглушены, они не слишком ярки, и чем ниже их тон, тем менее они слышны. Для некоторых целей это хорошо, и потому я созданный сценарий считаю успешным.
  Но в других случаях хотелось бы иметь более громкий м выразительный звук в малой октаве и на басах. Поэтому созданный ранее сценарий я доработал, и такие возможности теперь ему доступны. Кроме того, новый сценарий имеет и другие, более разнообразные способы регулировки тембра, отслеживая по партитурным пометкам такие нюансы, как, например, мягкое нажатие на клавишу, или удар по ней.

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


   УПРАВЛЕНИЕ ЗВУКОМ ФОРТЕПЬЯНО ИЗ ПАРТИТУРЫ

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

  Партитурные пометки, обрабатываемые непосредственно МУЗом важны, но немногочисленны. Кроме того, они относятся не только к тому "инструменту", на котором "играет" МУЗ, не к тому сценарию, к которому МУЗ обращается, а они имеют характер, общий для всех инструментов.
  Прежде всего, это указания на громкость звучания H=... и локальные значки - отныне играть громче чуть-чуть <, громче заметно <<, или играть тише >, >>. Указание на общий темп S=1.2 замедлит общий темп на 20%, а локальное указание t4000 добавит к звучанию именно этой ноты длительность 4000 семплов.

  Партитурных пометок, перенастраивающих тембр фортепьяно на уровне сценария, в старом сценарии тоже было предусмотрено немного. Их всего три.

  Партитурное указание UDa=3.998 заменит значением 3.998 величину диссипативного фактора DU1=3.995, заданную в сценарии по умолчанию ( то есть в том случае, когда UDa не указывается, или указывается, как равное нулю). Замена эта происходит через глобальную переменную UD№a, где № - номер МУЗа.
  В сценарии для МУЗа 3 это делается так - IF UD3a>0 THEN DU1=UD3a ELSE DU1=3.995
  В результате звук группы фортепьяно будет затухать слабее и будет длится дольше, при том же времени атаки - 3 периода колебаний. Естественно, при необходимости, и время атаки можно изменить тем же путём. Укорочение времени атаки (вплоть до нулевого значения) усиливает резкость звука и переводит впечатление от удара по струне к впечатлению щипка за струну.

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

  Отдельно следует сказать о параметре EA и об указании Ea=..., с помощью которого можно менять значение этого параметра. Параметр этот, вместе с тремя другими - E0, E2 и E2, участвует в деформации синусоиды, но только он может быть задан из партитуры.
  Что же такое - деформация синусоиды, и зачем она нужна?
  Звук фортепьяно в октавах, начиная с первой и выше, очень напоминает своей формой обыкновенную синусоиду, может быть лишь слегка деформированную, поэтому и возникает мысль, синтезировать звук фортепьяно именно таким способом. И когда все четыре параметра EA, E0, E2 и E2 равны единице, тогда синтезированное колебание действительно соответствует синусоиде.
  Спектр его очень прост - в нём, помимо пика основной частоты F, имеется лишь несколько пиков значительно меньшей интенсивности, эквидистантно расположенных с интервалом  2F (см. первую диаграмму рисунка). Если бы синтезировалась "чистая" синусоида, то и этих пиков не было бы, но на практике синусоида аппроксимируется параболой, и потому эти небольшие пики появляются.

  Да, "горбик" синусоиды легко сделать на интервале от -1 до 1, воспользовавшись формулой
Y=1-X*X. Но давайте "горбик" обострим, возведя Y в четвёртую степень, и в качестве амплитуды звукового колебания возьмём значение Y=EA*Y+(1-EA)*Y^4. Таким образом, звуковое колебание теперь будет состоять из двух слагаемых - из обычной, и из обострённой синусоид.
  Форма колебания такой "подправленной" синусоиды для разных значений EA показана на второй диаграмме рисунка. Если взять форму, показанную чёрным, с EA=.3, то звучать она будет звонче, чем обычная синусоида, посмотрите - и дополнительные пики в спектре появились.
  Звонче, но характерного звука фортепьяно по-прежнему нет.

  Чтобы получить характерный звук, нужно и форму колебания сделать точно такой, какая наблюдается у реального звука. Смотрим на реальный звук, и видим, что внутри его периода имеются три характерные точки - максимум в первом полупериоде, переход от первого полупериода ко второму через ноль, и минимум во втором полупериоде. И видим также, что точки эти расположены вовсе не на одинаковом расстоянии друг от друга. И тогда с помощью параметра E0 мы растягиваем длительность первого полупериода относительно длительности второго, с помощь параметра E1 поступаем аналогичным образом с четвертями первого полупериода, а с помощью параметра E2 изменяем длительности четвертей второго полупериода.
  Не думайте, что это сложно, в вычислительном плане это как раз очень просто сделать.
  Форма результирующего колебания для EA=.3 показана на третьей диаграмме рисунка. Спектр при этом, как видно, стал сложнее. А вот если параметры E0, E2 и E2 увести от единицы ещё дальше, то, посмотрите на диаграмму 4, - целый частокол высших типов колебаний возникает на ней.
  Как было сказано, только звонкость звука, только параметр EA регулируется извне. А параметры E0, E2 и E2 активно используются исключительно внутри сценария. Они не только имеют именно те средние значения, которые делают звук похожим на звук фортепьяно, но и совершают низкочастотную асинхронную девиацию вокруг средних значений, и это придаёт звуку естественность звучания. Спектр при этом также претерпевает изменения, находясь между показанным на диаграммах 2 и 4.
 

   НОВЫЕ ВОЗМОЖНОСТИ РЕГУЛИРОВКИ ЗВОНКОСТИ И ГУЛКОСТИ ЗВУЧАНИЯ

  В новом сценарии возможности регулировки параметра EA сделаны более удобными.
  Указание UEa=... устанавливает EA на периферии клавиатуры, а указание UX=... устанавливает EA в её центре, на границе малой и первой октав. Причём от центра до периферии этот параметр, имея значительный прогиб в центре на частоте 260 Гц, будет плавно подниматься к краям.
  Например, если установлено UEa=.5 и UX=-1 то:

 F,Гц= 40 65  130  200 260  320 520 1040 1200
   EA= .5 .5  .12 -.75  -1 -.84 .12  .5  .5    по умолчанию UEa=.3 и UX=0

  Указанное изменение формы звука воспринимается слухом немного по-разному - выше первой октавы снижение EA воспринимается как звон, а ниже первой октавы - как гулкость. Настроив уровень звона и гулкости на желаемую величину, можно уже не заботиться об индивидуальных указаниях w, хотя их тоже всегда можно сделать.


   РЕГУЛИРОВКА ГРОМКОСТИ ОБЕРТОНОВ

  Удар по клавише, или, наоборот – несильное, деликатное её нажатие, сопровождаются не только изменением громкости звука, но и изменением его обертонного состава.
  Норма сценария демонстрирует чётко слышимое возникновение обертонов при нажатии на клавишу. Однако указание в партитуре UDc=5.995 растянет время атаки для звука обертонов до 5-ти периодов, и их звук станет более мягким.
  Другим способом изменения звучания обертонов может быть указание на их громкость – Ar=.5 снизит громкость обертонов вполовину, а Ar=1.2 увеличит их громкость на 20%. Последующее указание Ar=0 вернёт громкость обертонов в норму.
  Одиночный удар по клавише может быть выражен локальным указанием b. При этом громкость обертонов увеличивается в 1.5 раза, а для следующей ноты установленная громкость обертонов восстанавливается.
  Громкость обертонов может быть установлена и не на одну ноту. Локальное w действует также, как и Ar=, но имеет перед ним приоритет – w.2 снизит громкость обертонов до уровня 20%, w1.6 поднимет громкость обертонов на 60%, а последующее w, с нулевым значением аргумента, вернёт громкость обертонов к уровню, установленному прежним указанием Ar=…
  Есть и другой способ сильного уменьшения яркости фортепьянного звука. Сурдинка – левая педаль пианино, приглушает звук, делает его глухим. При смягчённом ударе амплитуда начальных обертонов мала, да и сами струны впоследствии звучат не столь ярко. В программе локальное указание wЧ с аргументом Ч большим нуля, но меньшим .2, Уменьшит громкость обертонов на число Ч*5 и одновременно уменьшит амплитуду девиации параметров деформации синусоиды до величины V = Ч, тем самым уменьшив яркость основного звука. Для возврата к первоначальному звучанию используется w с нулевым значением аргумента.
  Всё сказанное выше реализуется в следующих четырёх строках сценария -   

    If ARE3>0 And ARE3<=3 And W3W=0 Then AU3=AU3*ARE3 'изменить громкость обертонов
    If W3W>=.2 Then AU3=AU3*W3W : W3W=0 'локально изменить громкость обертонов
    If W3W>0 And W3W<.2 Then AU3=AU3*W3W*5 Else W3W=0 'сурдинка
  If UD3b < 0 Then AU3 = AU3 * 1.5: UD3b = 0 'удар по клавише
      

   ВКЛЮЧЕНИЕ БАСОВ И РЕГУЛИРОВКА ИХ ГРОМКОСТИ

  С гулкостью, которая возникает при деформации синусоиды, мы разобрались.
  Но тому, чтобы хорошо звучали низкие ноты большой октавы и ноты контроктавы, искажения синусоиды не помогают. Более того, излишняя гулкость в этом диапазоне мешает. Связано это с тем, что девиация параметров осуществляется на частотах 7-13 Гц, и эти частоты начинают интерферировать с низкой частотой основного звука, а при гулком звуке это становится слышным. Поэтому должна быть снижена не только звонкость на высоких частотах, но и гулкость звука на частотах низких. То есть на краях клавиатуры, как и было сказано выше.

  Мало помогают слышимости басов и обычные обертонные колебания. Высокие обертоны будут слышны в виде добавочного высокого тона, а низкие обертоны будут слышны слабо по той же причине, по которой не слышен основной тон - динамики, а особенно динамики ноутбука, не справляются с передачей низких тонов.
  Позвольте, скажите Вы, но в записях "вживую" басы реальных инструментов и на ноутбуке звучат громко! Как же они там звучат?
  Конечно, звук реальных басов создают высокие обертоны, но это обертоны особые - они постоянно исчезают и возникают вновь, меняя друг друга, обрываясь и меняя свою фазу. Переходя друг в друга, они не только усиливают, но и заглушают друг друга взаимно. Поэтому дополнительный высокий тон обертонов мы в звуке не слышим. А что мы слышим?
  Мы слышим отчётливый звук основного тона.

  Точно такую же ситуацию можно создать при синтезе фортепьянного звука низкого тона. Следующие пять строчек сценария делают это:

    V=150-FS : IF V>110 THEN V=110
  IF FS<150 AND UV3>0 THEN 'квазиобертоны низкого звука включаются, если UV>0
       MU8=98002 : AU8=-AU3*V*UV3/100 : DU8=DU3-INT(DU3)+INT(FS/60)
       MU6=98006 : AU6=-AU8/2 : DU6=DU8 : END IF 
 
  Для частот FS ниже 150 Гц к основному звуку начинают добавляться колебания 2-го и 6-го квазиобертонов. Что представляет собой 2-й квазиобертон, показано на рисунке справа. Пички, видимые на рисунке в первом полупериоде колебания, получены возведением в 8-ю степень синусоиды с частотой 2*FS. Во втором полупериоде эти же пички обращены по знаку, и поэтому следуют в противофазе к двум первым пичкам.
  Естественно, что квазиобертоны присоединяются только тогда, когда на это указывается в партитуре. Например, если в партитуре указано UV=1.
  Амплитуды квазиобертонов AU8 и AU6 привязаны по своей величине к амплитуде группы рельефа AU3 ( а эта группа, напомню, создаёт обертонный фон фортепьянного зука), и регулируются значением указания UV=...
  Чем ниже частота, тем выше, в соответствии с множителем V, амплитуда присоединяемых квазиобертонов. Их диссипативный фактор тоже берётся от группы рельефа и корректируется по длительности атаки - на частотах ниже 60 Гц от бывших 3-х периодов колебания на атаку не остаётся ни одного, звук возникает резко, будто просто за струну дёрнули.
  Амплитуда 6-го квазиобертона относительно 2-го в два раза ниже, но зато пички острее и идут чаще. Кроме того, начиная с 80-ти Гц пички обостряются дополнительно - используется возведение синусоиды не в 8-ю, а в большую степень. Вот так это делается:

   CASE 8 : IF FFF>80 THEN A=A^8 ELSE X=8+(8-INT(FFF/10))*2 : A=A^X
        не ищите эту строку в сценарии фортепьяно, она находится в тексте присоединяемого блока B_FN, там имеется свой CASE 8, отношение к фортепьяно не имеющий. Совпадение цифры 8 - это случайное совпадение.
  Теперь, на обострённых квазиобертонах, низкие фортепьянные тона звучат вполне приемлемо.
____________ДОПОЛНЕНИЕ
  Для получения большей точности и живости звука, квазиобертоны немного изменены.
Шестая гармоника заменена на четвёртую, задание обертонов перенесено в нижнюю часть сценария, где для них делается небольшая антисимметричая девиация частоты.
Басы получаются более яркими и раскатистыми. Их тембр удобно регулируется указаниями UV= (громкость квазиобертонов) и b (сочный удар по клавише) - от тихого "ворчания" до удара форте. Сценарий внизу показан с этими изменениями.
 

  СЦЕНАРИЙ ЗВУКА ФОРТЕПЬЯНО.

 Ниже приводится сценарий звука фортепьяно в новом его варианте. В верхней строке показаны указания, которые можно давать для этого сценария из партитуры.

  Case 8 'f-no tembr: UDa=0 UDc=0 UW=0 Ar=0 b UEa=.3 1 w_w.2 UX=0 -1 UV=1
    'затухание_a_c полнозучие громкость_c удар звон сурдинка гулкость квазиобертоны
    MU1=0 : AU1=1.5 : IF UD3a>0 THEN DU1=UD3a ELSE DU1=3.995
    V=INT(DU1) : DU1=DU1-V : V=V+INT(FS/260)
    DU1=1-(1-DU1)*SQR(260/FS) : DU3=1-(1-DU1)*2 : DU1=V+DU1    
    MU3=0 : AU3=5 : IF UD3c>0 THEN DU3=UD3c
  IF FS>260 THEN AU3=AU3*SQR(260/FS) 'снижение обертонов на высоких частотах
    Vo=UEA3 : IF Vo=0 THEN Vo=.3 'след.строка делает звук гулким в м. и 1-й окт.
  IF FS>65 AND FS<1040 THEN V=COS(LOG(FS/260)*2.2662) : Vo=Vo-(V/2+.5)^2*(Vo-UX3)
    If ARE3 > 0 And ARE3 <= 3 And W3W = 0 Then AU3 = AU3 * ARE3 'изменить громкость обертонов
    If W3W >= .2 Then AU3 = AU3 * W3W : W3W = 0 'локально изменить громкость обертонов
    If W3W > 0 And W3W < .2 Then AU3 = AU3 * W3W * 5 Else W3W = 0 'сурдинка
  If UD3b < 0 Then AU3 = AU3 * 1.5: UD3b = 0 'удар по клавише
    V=150-FS : IF V>110 THEN V=110
  IF FS<150 AND UV3>0 THEN 'квазиобертоны низкого звука включаются, если UV>0
       MU8=98002 : AU8=-AU3*V*UV3/100 : DU8=DU3-INT(DU3)+INT(FS/60)
       MU6=98006 : AU6=-AU8/2 : DU6=DU8 : END IF
  A33r$="7550604565304035" : A32r$="6560505555403045" : A31r$="5560605545404045"
  Apm$="505050707050505560657035504744433857" : Dpm=.98 'стук клавиши
     R(0)=0 : V=FNR1(0,1006.4) : V=FNR1(0,2006.4) 'заброс эха
     IF UW3>0 THEN V=FNR1(0,3206.4) : V=FNR1(0,4506.4) '<=== полнозвучное эхо
     V=FNR1(30,-9)
  Case -8: V = 0.2: If UW3 > 0 Then If UW3 < 0.25 Then V = UW3
           If W3W > 0 Then V = W3W 'сурдинка - w.2 - w.01
        E0=(1.05+V)*(1+V*FNTIM(4,T)) : EA =Vo*(1+V*FNTIM(8,T))
        E1 =(1.1+V)*(1+V*FNTIM(10,T)): E2 =(1.1+V)*(1+V*FNTIM(7,T))
           V=(FNTIM(9,T)+FNTIM(13,T))/3 : Arr$=FNRE$(AU3/2-1+V,3)
If AU8<>0 Then V=0.04*AU3: V =(V*V+0.07)*FNTIM(6,T): MU8=99002+V: MU6= 99004-V

 
  Таких указаний может быть сделано девять. Мнемоника их в партитурах для разных МУЗов одинакова, а глобальные переменные, перестраивающие сценарий, содержат в своём названии номер МУЗа.
Сценарий, приведённый выше, и переменные, перечисленные ниже. относятся к МУЗу №3 -

указание переменная пояснение

UDa=... UD3a - диссипативный фактор группы фортепьяно
UDc=... UD3c - диссипативный фактор группы рельефа ( рельеф обертонов)
UW=...  UW3 - полнозвучие ( при UW=1 добавляются забросы на дальнее эхо)
Ar=...  Ar3 - громкость обертонов ( если 1, то указанная в сценарии)
b       UD3b - удар по клавише ( громкость обертонов увеличивается в 1.5 раза)
UEa=... UEA3 - звонкость на периферии клавиатуры
w...    W3W  - локальная звонкость ( указываемое значение имеет приоритет)
UX=...  UX3  - гулкость в центре клавиатуры
UV=...  UV3  - подключение басов ( громкость квазиобертонов, 1 - номинал)

__________ 25.04.2017
Звук на новом сценарии можно послушать тут - http://yadi.sk/d/O7X0iNl43HonLP
обратите внимание на звучание низких нот и на акценты, сделанные указанием b.

 


Рецензии