От нот до записи. Синтез музыкального звука

  Большая обзорная статья об одном музыкальном проекте.
  Скачать статью в PDF формате - http://cloud.mail.ru/public/JWpi/SEcwssjm1
  Плейлисты - http://my.mail.ru/mail/dima-masht1/music
  Музыкальные записи также размещены тут - http://cloud.mail.ru/public/ChXE/T265mxyhp
  Клипы смотрим на моём канале на Ютубе - http://www.youtube.com/channel/UCxmwXkCiEIs7Stw7tlADyYw 

  Проект, о котором я буду рассказывать, связан с синтезом звука музыкальных инструментов.
  Он развивался на протяжении 3-х лет, и практически с нуля. До его начала, то есть в конце 2014-го года, я о синтезе музыкального звука совершенно ничего не знал. И задачи у меня вначале были очень скромными - имея навыки программирования в Бейсике, я хотел сделать на клавишах компьютера что-то вроде пианино.
  Чтобы нажатие на клавишу вызывало звук, а последовательность нажатий на разные клавиши каким-то образом записывалась - так, чтобы полученные звуки можно было бы затем проиграть. И исправить ноты, если в них окажется что не так. То есть, задача скромная - сделать игрушку. Много таких есть в интернете, но я хотел сделать свою.

  И вот, год назад проект закончен. Сделаны четыре оригинальные программы. С их помощью любой человек, имеющий даже маломальское музыкальное образование, может сделать хорошие записи музыкальных произведений любой сложности по своим нотам, или по нотам, найденным в интернете. Естественно, процесс этот творческий, Вы можете интерпретировать музыку, создавая нюансы исполнения по своему усмотрению.
  Все четыре готовые программы проекта можно скачать отсюда - http://yadi.sk/d/VEN-Ok3B3NiUqj
  Сделанные музыкальные записи, можно прослушать тут -
http://cloud.mail.ru/public/ChXE/T265mxyhp  или тут http://yadi.sk/d/poMxlrBuxendv
  Помимо прямого практического результата, открываются широкие возможности проводить исследования в области музыкального звука, изучать звук, создавать сценарии для звука того или иного музыкального инструмента, включать эти сценарии в программу, и, тем самым, развивать проект дальше.
 
  Проект, как я уже говорил, оригинальный - он использует по-периодный метод синтеза музыкального звука. Внутри этого метода используется 4 разных алгоритма и дополнительные техники. Само развитие этого метода потребовало создания специальной терминологии - http://www.proza.ru/2017/02/14/108
  Такие термины, и соответствующие им понятия, как "простой звук", "возобновляемый обертон", "неполный обертон" и "квазиобертон" не используются никем. Гармоничный звукоряд с 19-ю полутонами на октаву, о котором до самого последнего времени не было известно, также включён в проект. А уж это-то поле, в котором, как говорится, и конь со времён Пифагора не валялся. Так что результаты получены впечатляющие.
  Говоря об оригинальности, добавлю, что проект не использует МИДИ протокол. Нотные записи и партитуры, по которым осуществляется озвучивание, находятся в обычных текстовых файлах.

  Рассказывать буду обо всём подробно, но популярно. Мелкие подробности, связанные с работой программ, можно узнать от самих программ - окна Help находятся в них:
Пианола - http://yadi.sk/d/yWSZf7a43Y4XBM
Трио - http://yadi.sk/d/s-6bamlL3Y4XJQ скачивайте и работайте, в программах есть и примеры, Вы во всём легко разберётесь.
  Менее популярно, с уклоном в программирование и с описанием различных экспериментов, изложено в отдельных статьях. Последнее - в разделе "Синтез музыкального звука в Визуал Бейсике" и в разделе "Продолжение музыкального проекта" на моей страничке на проза.ру - http://www.proza.ru/avtor/dimamasht


    ПИАНИНО НА КЛАВИШАХ КОМПЬЮТЕРА

  Итак, решив сделать игрушку, я стал размышлять - какую клавишу клавиатуры компьютера на какую ноту назначить?
  Решил, пусть будет, как на пианино - на ряду с цифрами "чёрные" клавиши, на ряду ниже - "белые". Ну, на моём ноутбуке все клавиши чёрные, поэтому я промежутки между "чёрными" клавишами заклеил белым скотчем, а сверху обозначения, какие на клавишах были, написал. Функционально получилось так, как Вы это видите на рисунке.

  На рисунке видно, что под ноты отведён и ещё один ряд клавиш - третий, с бемольными обозначениями "-" на этом ряду.
  Все три ряда работают не повторяя друг друга в настройке на 19 полутонов в октаве. А при настройке на 12 полутонов, третий ряд дублирует второй с бемолями, то есть нота третьего ряда является бемолем к ноте из второго ряда, расположенной  наискосок вверх-вправо. Так, как это написано на клавишах третьего ряда на рисунке.
  А что написано на клавишах, Вы поняли?


     МНЕМОНИКА НОТНЫХ ОБОЗНАЧЕНИЙ

  Мнемонику для обозначения нот я взял общепринятую. Гамму до-ре-ми-фа-соль-ля-си в первой октаве я обозначил как C D E F G A B, а во второй октаве, как c d e f g a b.
  Знак "#" после буквы означает диез, а знак "-" после буквы означает бемоль.
  При нажатии "чёрных" клавиш буквы с диезами после них вводятся автоматически, а с бемолями - только в настройке на 12 полутонов и если установлена бемольная тональность. Переключаются тональности нажатием Alt/Q. То же нажатие клавиши Q вызовет звук ноты До, если клавишу Alt при этом не нажимать.
  При одновременном нажатии с Alt, ноты не звучат, но некоторые нотные клавиши производят другие действия (подробности см. в программе Пианола).

  Мы видим, что клавиш с буквами "a" "b" на клавиатуре нет, однако эти буквы и звук соответствующих нот, мы увидим и услышим, нажимая клавиши нот первой октавы одновременно с клавишей Ctrl. Таким образом, первая и вторая октавы обеспечены нотами полностью.


     НАСТРОЙКА КОМПЬЮТЕРНОГО ПИАНИНО

  Ладно, подумал я, если делать пианино на компьютере, то и настраивать его нужно математически точно, а не таблицами для частот пользоваться. А знаете ли Вы, как настраивают пианино? Я не только знал, но и изредка делал это практически. На слух. По квинтам вниз. Квинта - наиболее благозвучный интервал, потому и настраивать легко.
  А математически это как?
  Частота ноты Ля первой октавы - 440Гц. Для получения частот других нот используем простую дробь 2/3, то есть, умножаем частоту на 2 и делим на 3. Получаем частоту ноты Ре - квинта вниз.
  И делаем так 12 раз (если частота уходит ниже частот первой октавы, то переходим на октаву вверх, умножая на 2). После 12-го раза обнаруживаем, что пришли к началу расчёта - получили частоту почти равную 440.
  Почти, да не совсем. Получили 434.078 Гц. Разница частот в 6 Гц называется пифагорийской коммой. Такая настройка с коммой приводит к неполному благозвучию в некоторых тональностях, но зато каждая тональность имеет своё "лицо", свои отличимые гармонические особенности.
  Аналогичную настройку мы можем осуществить с дробью 3/4 - по квартам вниз. Получим примерно тот же строй, но в обратной последовательности нот (от Ля на Ми и т.д.). Итоговая частота после 12-го раза - 446.003 Гц. То есть, та же комма, только с другим знаком.
  Наконец, есть настройка с равномерной темперацией - частота следующего полутона в хроматической гамме, получается умножением частоты предыдущего полутона на число 1.059463.  Откуда такое число взялось? Берём 2. Берём от этого числа десятичный логарифм. Результат делим на 12. То, что получилось, используем как степень для возведения в неё числа десять.
  В настройке с равномерной темперацией имеющееся неблагозвучие как бы равномерно размазывается по всем тональностям, и они становятся функционально неотличимыми одна от другой.
 
  Пифагор не любил числа 5. А если бы любил, то мог бы использовать дроби 3/5 и 5/6 для настройки своих музыкальных инструментов. Настройка по секстам и терциям создаёт 19-ти полутоновой звукоряд, сходящийся к исходной частоте 440 Гц с коммой всего 0.6 Гц. Этот звукоряд сразу оказывается в целом более гармоничным, и практически равномерно темперированным. Пифагор до такого не додумался, и развитие мировой музыки пошло тем путём, о котором мы знаем.
  Ну а мне-то, в компьютерном пианино почему бы такую настройку не использовать?
  Проку от неё мало, потому, что нот, рассчитанных на неё нет, но для экспериментов по гармонии она годится. Отсюда и появились дополнительные семь нот к октаве, с бемольными обозначениями на третьем ряду клавиш.


     СТРОКИ НОТНОЙ ЗАПИСИ И ИХ МНЕМОНИКА

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

  Если хотим повысить тон на октаву, пишем в строку слежу вверх - "/". Для понижения тона на октаву пишем слежу вниз - "\".
  Замедлить звучание нот вдвое позволяет символ "<". Символ ">" ускоряет вдвое звучание последующих нот.
  Этими же символами с цифрой, стоящей за ними, может быть назначено небольшое, дополнительное изменение высоты тона, или длительности звучания нот. Цифра ноль после знака снимает это назначение.
  Например, ноты Ми и Фа в последовательности - CD>2EF>0GA будут сыграны чуть-чуть быстрее других нот. А если на место 2 поставить цифру 9, то убыстрение скорости игры на этих нотах будет очень заметно.
 
  Длительности звучания отдельных нот также можно изменять цифрами, или значками, стоящими сразу (то есть, без пробела) после их обозначений. Например, звучание ноты Соль диез с длительностью четверть "с точкой" (по общепринятой нотации) в мнемонической записи будет выражено так - G#7
  Цифры 5 6 7 8 9 увеличивают длительность звучания нот, цифры 4 3 2 1 - уменьшают её. Значок крыша "^", поставленный сразу после нотного обозначения, увеличит время звучания ноты вдвое, а поставленный через пробел, длительности звучания ноты не изменит, но создаст паузу этой же длительности. С аналогичными целями используются также значки ~ ' `.

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

  >D GAB-c <d7>d cde-c <d7>d cde-c   а счётчик покажет 10.5

  Такты не обязательно разделять пробелами, но с пробелами читать запись удобнее.
  Когда мнемоническая строка отредактирована и выверена по счёту, то запоминаем её, нажав клавишу [Enter], и переходим к следующей строке музыкальной записи.
 

     НОТНАЯ ЗАПИСЬ

  Но вот, все строки музыкального произведения, или его части, переведены в мнемоническую форму, и возникает вопрос - в какой форме их сохранить? Многие нотные редакторы используют для этого свои специфические файлы, доступные только им.
  Но Пианола хранит нотные записи в обычных текстовых файлах. Эти файлы можно открывать программой Блокнотик, просматривать и даже редактировать. Чтение этих файлов просто и понятно. Вот так выглядит содержание файла, хранящего нотную запись "Старинной французской песенки" для правой руки:

{Фр.песенка}
 1  {*5420| >DGAB-c <d7>d cde-c <d7>d cde-c               }
 2  {*5420| >d>e-d<cB- <A7G' G7>D GAB-c <d7>d cde-c <d7>d }
 3  {*5420|>cde-c d>e-d<cB- <A7G' G^ A>GA <B-7B-' cc      }
 4  {*5420| A7A' d7>d e->fe-<dc B-^AG <F#7>D GAB-c        }
 5  {*5420| d7>d cde-c <d7>d cde-c d>e-d<cB- <A7G' G^     }
,,,

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

  Посмотрим на знаки между фигурной скобкой и вертикальной чертой. Это опции строки.
* - признак того, что в эту строку что-то было записано
5 - дополнительное замедление темпа в 1.32 раза, не учитываемое при счёте
4 - 4-я октава ( первая, по общепринятому названию)
2 - строка начинается четвертными нотами
0 - легато

А вот как выглядит нотная запись для левой руки, в которую была записана только первая строка из нотного текста "Старинной французской песенки":

{Имя мелодии}
 1  {*5320| ' G^ GG e-c B-G ge-  }
 2  { 3420|                }
 3  { 3420|                }
 4  { 3420|                }
 5  { 3420|                }
,,,

имя мелодии мы ещё не дали,
5 - дополнительный темп в первой строке взят 1.32
3 - первая строка начинается нотами малой октавы
3 - по умолчанию дополнительный темп на вновь открытых строках не вводится
4 - по умолчанию строка начинается нотами первой октавы


     КАК ПРОИГРЫВАТЬ НОТНЫЕ ЗАПИСИ

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

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

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

  Программа Пианола легко справляется с этим. Помимо файла музыкальной записи она может сделать файл партитуры. Это тоже текстовый файл. Он имеет такую структуру:

 1 ================= TFP.TXT   VEL= 32000
F= 293.66 T1= 10349  T2= 211
F= 392     T1= 10349  T2= 211
F= 440     T1= 10349  T2= 211
F= 466.16 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
F= 587.32 T1= 31046  T2= 634
F= 587.32 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
F= 587.32 T1= 10349  T2= 211
F= 622.26 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
F= 587.32 T1= 31046  T2= 634
F= 587.32 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
F= 587.32 T1= 10349  T2= 211
F= 622.26 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
 2 ============ 221760  221760  6,93
F= 587.32 T1= 10349  T2= 211
F= 622.26 T1= 5174  T2= 106
F= 587.32 T1= 5174  T2= 106
F= 523.26 T1= 10349  T2= 211
F= 466.16 T1= 10349  T2= 211
F= 440     T1= 31046  T2= 634
F= 392     T1= 10349  T2= 211
F= 392     T1= 31046  T2= 634
и так далее ...

  В результате, вместо пяти строк в файле нотной записи получается файл партитуры с пятью страницами. Страницы пронумерованы и разделены чёрточками. После разделителя указано число семплов на предыдущей странице, общее число семплов на всех предшествующих страницах и расчётное время в секундах от начала записи.
  Вы можете сличить содержание этого файла с нотами, и понять, что к чему.
  Осталось сделать в этом файле дополнительные пометки, да так, чтобы компьютер понял, какую ноту на каком инструменте и как исполнять.
  Не думайте, что это сложно. Компьютер не менее понятлив чем человек. Он также может читать текстовые файлы и выполнять те Ваши указания, которые он в них найдёт. Если, конечно, Вы запрограммируете его к этому. А если Вы не программист, то Вам достаточно знать, что это совсем не трудно сделать.
  Не все пометки, настраивающие компьютер, Вы обязательно должны вносить в партитуру. Некоторые параметры он принимает по умолчанию. Так, чтобы не получалось слышимых хлопков в моменты окончания звука, звук не должен обрываться резко - в течении последних TE семплов (из указанных T1), звук линейно сводится на ноль. Если величина TE в партитуре не задаётся явно, то принимается TE=20.



     ПОГОВОРИМ О СЕМПЛАХ

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

VEL= 32000 - это скорость раздачи семплов. такое количество семплов приходится на 1 сек звучания музыкальной записи, по каждому каналу, и правому, и левому.
  Несмотря на то, что принята другая цифра - 44100, но и с 32000 запись звучит хорошо. Поскольку темп нашей музыки был взят замедленным, то на звучание восьмой ноты приходится не четверть секунды, или 8000 семплов, а несколько больше - 10500, как это видно по начальным нотам партитуры.

  Кстати, на период колебания ноты Ля первой октавы сколько семплов приходится?
  32000/440 = 73 настолько подробно прописывается период звукового колебания.
Кому кажется, что этого мало, может взять другую скорость раздачи - 44100/440 = 100 это уж точно всех устраивает.


     ЗВУКОВАЯ ФУНКЦИЯ

  Итак, у нас есть партитуры. Отвлечёмся пока от глобальных задач соединения всех звуков вместе, и посмотрим на строку партитуры. Что мы там видим?
  Видим, что задана частота F и длительность звучания ноты T1. Длительность звучания задана в количестве семплов. Нам, стало быть, надо получить нужное количество семплов от некого музыкального инструмента, звучащего на частоте F.
  Как это сделать?

  Давайте, запрограммируем некую функцию (назовём её звуковой) FNSS(F,k) от двух параметров - частота F,  номер инструмента k.
  При первом обращении полагаем F=0. Выполняем оператор A=FNSS(0,0)
  Такое обращение пусть настроит звуковую функцию на начало звука, сообщит ей, что мы начинаем генерацию семплов с неизвестным пока инструментом.
  А затем обращаемся к нашей функции так - A=FNSS(F,k) и делаем таких обращений T1, получая каждый раз амплитуду очередного семпла. И до тех пор, пока параметры обращения (F,k) будут всё те же, звуковая функция будет постепенно развивать звук, проходя все его стадии - возникновение, атаку и постепенное дальнейшее затухание. А возможно и не затухание, а усиление, если, например, меха у гармони сильнее растягиваются. Все эти хитрости "как и что" формируются при самом первом обращении к функции из серии T1.
  Короче говоря, я всё вам объяснил, не объяснив самого главного - а как устроена эта самая "звуковая функция" внутри? К этому мы тотчас и приступим.


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

  Начну с простого вопроса - барабан, это музыкальный инструмент?
  И, вроде бы - да, но можно ли говорить о музыкальной частоте звука барабана? Мы предполагаем создавать звуки музыкальных инструментов, воспроизводящие ноты с чётко слышимой, превалирующей в звучании частотой F. А какая частота у звука барабана?
  Такой же вопрос можно задать и в отношении аккорда - какая частота у аккорда?
  Ясно, что такой вопрос не корректен. И звук барабана, и звук аккорда, это - СЛОЖНЫЙ звук. Или, точнее сказать, - звук, сложенный из многих или нескольких одновременно звучащих ПРОСТЫХ звуков.

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

  Мы же термин "простой звук" свяжем со звуком ноты музыкального инструмента.
  То есть "простой звук" = "сложный тон" музыкального инструмента. Тон, которому, несмотря на его сложность, можно приписать определённую частоту F и период T=1/F.

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

  Такое поведение реального звука прямо даёт карт бланш на метод его синтеза. Счёт по методу по-периодного синтеза ведётся как бы рывками, в два этапа. В начале каждого периода в вычислениях семплов происходит остановка, по довольно сложному алгоритму определяются некие параметры, входящие в формулы достаточно простые, чтобы по ним мог быть осуществлён быстрый счёт. А на втором этапе мы много раз вычисляем  амплитуды семплов по быстрым формулам.
  Такое разделение счёта на два этапа позволяет как развивать звук по любому. достаточно сложному алгоритму, так и придавать звуку естественность звучания. Как выяснилось, ДЕВИАЦИЯ параметров - периодические изменения параметров около их средних  значений с частотами 6 - 14 Гц, прекрасное средство для создания естественного звука. Обращаю Ваше внимание - девиация параметров, также как и их постепенное изменение, связанное с развитием звука, проводится в промежутке между периодами, то есть редко - не занимая в общем счёте много времени.

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


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

  Звуковая функция может использовать три группы параметров, и, соответственно три различных алгоритма для вычисления амплитуд семплов внутри периода T=1/F. Это "группа деформируемой синусоиды", "группа Виолы" и "группа Рельефа".
  В каждой группе первые три параметра стандартны. Они называются "модуляционным", "амплитудным" и "диссипативным" факторами.
  В сущности своей, это переменные, значение которых устанавливается при первом рабочем обращении к звуковой функции. Например, при обращении для создания звука рояля факторы первой группы приобретают значения:

MU1 = 0     что означает отсутствие амплитудной модуляции звука
AU1 = 1.5   максимальная амплитуда звука составляет 1.5
DU1 = 3.995 достигается эта максимальная амплитуда не сразу,
            а линейно возрастая от нуля за 3 периода колебания,
            а после этого амплитуда уменьшается по экспоненте,
            для чего в начале каждого периода умножается на .995
причём сразу после задания, диссипативный фактор может быть скомпенсирован с учетом различия скорости затухания звука для струн разных частот. А для получения особой мягкости звука в момент удара может быть увеличено и время атаки.

  Помимо трёх стандартных факторов, в каждой группе имеются дополнительные параметры. Название "деформируемая синусоида" говорит само за себя - взгляните на красную кривую рисунка. Это и есть деформированная синусоида.
  Второй полупериод растянут относительно первого. Он длиннее его в E0 раз.
  Параметры E1 и E2 выразят аналогичное отношение для четверть периодов внутри первой и второй половинок периода. Параметр EA синусоиду обострит. Вот мы и получили форму кривой, очень характерную для колебания звука фортепьяно в первой октаве.
  Теперь достаточно придать некую разнопериодическую турбулентность этим параметрам, слегка изменяя их перед началом каждого нового периода колебания, и звук оживёт. Он будет очень похож на звук реального пианино.


     ГРУППА ПАРАМЕТРОВ ВИОЛЫ

  В группе Виолы ситуация со стандартными факторами та же самая.

  MU2 = 20.2: AU2 = 4: DU2 = 150.99 - читаем в сценарии под названием "viola звенящий"

  Здесь, в первом факторе 20 - число периодов звука, приходящихся на один период амплитудной модуляции, а .2 - глубина амплитудной модуляции.
  Также, как и для  первой группы, значение DU2 может быть установлено указанием из партитуры. Его можно указать, например, таким 150.005, но это не значит, что сразу после достижения максимума после атаки, звук провалится. Нет, будет отработано 149 периодов атаки, а после звук будет ещё постепенно нарастать, увеличивая от периода к периоду свою амплитуду в 1.005 раза.

  Что касается формы кривой внутри периода, то она определяется специальным для группы Виолы фактором "mod2". Если mod2 = 0, 1 или 2, то кривая имеет форму синусоиды (не деформированной), аналогичную кривую "верблюд" с двумя небольшими горбами у вершин - два горба сверху, два горба снизу, и колебание типа "треугольник".
  Если же mod2 = 3, 30, 31, 32, 33, 34 или 35, то кривая представляет собой один (показано на иллюстрации), два или три острых пичка (31 или 32).
  Параметр Vi связан с шириной пичка по основанию
              Vi=.3 соответствует нормальному скрипичному звуку, Vi=.5 - игре
                у середины струны, Vi=.18 - игре у подставки
  Параметр Vo - связан со сдвигом пичка относительно начала периода,
                или с расстоянием между пичками, если их несколько
  Параметр Vh связан с высотой второго и третьего пичков (Vh<1), 
              или обрезает вершину пичка на уровне 1 (для mod2=35 и Vh не равном 1)
              Пичок с уплощённой вершиной звучит мягче.

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


     ГРУППА ПАРАМЕТРОВ РЕЛЬЕФА

  Факторы MU3, AU3 и DU3 используются совершенно аналогично факторам предыдущих групп.

  Рельеф звука внутри периода создаётся интерполяцией по образцу. Образец записывается в начале каждого периода в строку Arr$. Таким образом, от периода к периоду рельеф звука может меняться.
  При первом рабочем обращении к звуковой функции три разных образца рельефа записываются в строки A_3r$, A_2r$ и A_1r$. Рельеф в строке Arr$ меняется плавно от одного образца к другому также путём интерполяции. Делается это так:
  представьте некую гипотетическую переменную, меняющуюся от 1 до -1. Когда эта переменная равна единице, то рельеф берётся из строки A_3r$. Для нуля - из A_2r$. Для -1 - из A_1r$. Ну, а для промежуточных значений в строку Arr$ записываются промежуточные значения рельефа.
 
    Пример использования группы Рельефа.

  Звук фортепьяно состоит не только из деформированной синусоиды. В этом звуке присутствуют ещё и обертоны, особенно ярко слышимые непосредственно после удара молоточка о струны. Эти обертоны создаются группой рельефа так:

 A33r$ = "7550604565304035": A32r$ = "6560505555403045": A31r$ = "5560605545404045"
   эти присвоения происходят при первом обращении к звуковой функции.

 V = (FNTIM(9, T) + FNTIM(13, T))/3: Arr$ = FNRE$(AU3/2-1+V, 3)
   а эта цепочка из двух операторов выполняется перед каждым периодом.   

  Разберёмся сначала с цифрами в строках образцов рельефа.
  В строке A33r$ находятся числа 75 50 60 45 65 30 40 35. Добавим к этой последовательности слева и справа по числу 50, и примем 50 за нулевой уровень. Вот мы и получили образец рельефа, находящегося в первой строке.

  Перейдём теперь к цепочке из двух операторов.
  Функция FNTIM(9, T) изображает колебание треугольного вида с амплитудой 1. Здесь 9Гц - частота колебаний, T - время в секундах. Легко увидеть, что переменная V совершает замысловатую девиацию около нулевого уровня, не отклоняясь от него более чем на 2/3.
  Функция FNRE$(y, 3) создаёт строку текущего рельефа, исходя из имеющихся строк трёх образцов, сообразуясь со  значением гипотетической переменной y, так, как о том говорилось выше. Видим, что переменная эта задаётся так y=AU3/2-1+V - средняя её величина вначале, соответствуя значительной амплитуде AU3, оказывается больше 1, а затем, по мере уменьшения амплитуды обертонов, опускается до уровня -1. И вокруг этой средней величины непрерывно происходит девиация из-за изменяющегося значения переменной V.

  Таким образом, по мере развития звука происходит не только ослабление присутствия начальных обертонов, но и изменяется обертонный состав звука. И в самом деле, начальный образец рельефа имеет многочисленные максимумы и минимумы, он изображает присутствие обертонов 2, 3, 4 и 5. Второй образец имеет максимумы и минимумы и числом, и амплитудой поменьше. А последний - совсем похож на синусоиду с небольшим присутствием второй гармоники.
  На осциллограмме синтезированного звука фортепьяно, слева от красной кривой, видно, как быстро исчезают колебания гармоник обертонов на фоне остающегося звука деформируемой синусоиды.
  Этот пример с одновременным использованием двух групп параметров (двух методов) для создания и развития звука фортепьяно характерен. Сценарий развития звука обычно не ограничивается только одним алгоритмом, и это делает сценарий более вариабельным, управляемым, допускающим изменение тембра.

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


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

  Выше говорилось о строках, представляющих рельеф. Естественно, возникает мысль - а нельзя ли сделать такую строку автоматически, сняв строку, как реплику с рельефа реального звука? Как это сделать, подробно описывается здесь - http://www.proza.ru/2017/10/20/1279
  Для снятия реплики рельефа используется пара опций утилиты (вспомогательная программа) "Манипулятор WAV файлами", скачать тут - http://yadi.sk/d/kyG5RSRD3YPUzY
  Суть процесса состоит в следующем. Интересующий нас фрагмент звука инструмента, соло с одной звучащей нотой, обособляется с помощью программы Wave Editor и переводится в WAV формат. Если это стерео запись, то программой "Манипулятор WAV файлами" она переводится в моно форму записи.
  Затем с помощью одной из опций Манипулятора в начало фрагмента вставляется прямоугольная метка - характерная последовательность амплитуд, хорошо видимая в окне Wave Editor.
  Средствами этого редактора метка копируется в начало и в конец того периода звукового колебания, реплику которого мы хотим снять.
  Снова обращаемся к утилите, к опции "Снять реплику". Указываем длину реплики (целая часть числа в скобках), и размах амплитуды от нуля до её максимального значения (дробная часть числа в скобках).
  Кликнув кнопку "Выполнить", в файле REPL.txt получаем результат в виде рисунка и в виде готовой строки-реплики.
  Мнемоническая запись амплитуд в строке соответствует принятой в Трио -
цифры 50 означают нулевую амплитуду, 99 - максимальную (положительную), 00 - максимальную с отрицательным значением.


     ГРУППА ОБЕРТОНОВ

  Несмотря на то, что привнесение обертонов в звук вполне может осуществляться группой алгоритма Рельефа, в проекте предусмотрены четыре обертона со знакомыми Вам обозначениями параметров (номер 4 оставлен, как резерв):

  MU5 AU5 DU5,  MU6 AU6 DU6,  MU7 AU7 DU7,  MU8 AU8 DU8 

  Амплитудный и диссипативный факторы работают точно так, как Вы об этом знаете, за исключением того, что у обертонов после завершения фазы атаки, звук может только затухать. Возможности "растянуть меха" для обертонов нет.
  Однако первый фактор не означает модуляции. Он имеет некое мнемоническое значение.
  Структура этого фактора такова - ЦЧ016.2

  Если на месте цифр Ц и Ч ничего не стоит, или стоят нули, то остальные цифры указывают на обычный обертон. В приведённом примере это непрерывающаяся синусоида с частотой в 16.2 раза более высокой, чем частота основного колебания F.
 
  Если цифра Ч нечётна, то синусоида обостряется - возводится в нечётную степень. Причём, степень эта больше, чем цифра Ч. Для последовательности Ч=1,3,5,7,9 показатель степени берётся 3, 5, 7, 9, 15.
  Если цифра Ч чётна, то показатель степени берётся чётным. В результате вместо синусоиды получаются положительные обострённые пички, следующие с частотой вдвое большей, чем та, на которую указано в младших разрядах.
  Обострённые обертоны обладают характерным звенящим, жужжащим и более резким тембром. Кроме того их слышимый гармонический тон слегка повышается в сравнении с тоном синусоиды на той же частоте. Обострённые обертоны могут быть использованы для создания гитарного или колокольного звука - http://www.proza.ru/2016/05/16/1070
   
  Для цифры Ц предусмотрены значения 1 2 3  7 8 9.
  Если таковая цифра имеется, она означает, что генерируемый обертон является обновляемым. То есть, фаза его колебания обновляется - устанавливается в ноль перед началом колебания внутри периода.
  Для обертонов с опцией 3 колебание начинается с началом периода, заполняет период целиком, но поближе к концу сводится на ноль. Такое сведение к нулю сделано для того, чтобы резких изменений амплитуды, скачков, не было на стыке периодов ни при какой частоте обертона.
  Обертон с опцией 1 заполняет колебаниями только первую половину периода. К середине периода колебания сводятся к нулю.
  Колебания обертона с опцией 2 начинаются с середины периода. и заполняют только его вторую половину.
  Обертоны с опциями 7 и 8 являются своеобразными конструкциями, в которых колебания во второй половине периода повторяют колебания в первой, только с обратным знаком. При этом, в середине периода или на стыке периодов, возможны разрывы.
  Обертон с опцией 9 повторяет алгоритм обертона 8, однако указанные разрывы ликвидируются сведением амплитуды к нулю к середине и к концу периода.

  Все виды обертонов можно просмотреть в программе Трио в тестовом режиме на осциллограммах.
  Опции 1 и 2 представляют собой "неполные" обертоны - обертоны, которые имеют пропуски в своём звучании, в частности, внутри периода они могут быть представлены одним или двумя пичками.
  Частным видом возобновляемых обертонов являются "квазиобертоны" - обертоны, часть колебаний которых идут в противофазе колебаниям предыдущей части, и поэтому частота их отсутствует в спектре Фурье. Такие, неслышимые на своей частоте обертоны, прекрасно воспроизводятся динамиками ноутбука, и могут быть использованы для синтеза музыкального звука очень низких частот. На нижней осциллограмме звука фортепьяно представлено звучание ноты Ре контроктавы в своём развитии. Этот низкий красивый звук прекрасно слышен. Сделан он добавлением обертонов 99002 и 99004 с небольшой девиацией частот относительно целых значений.
  О подробностях добавления этих обертонов тут - http://www.proza.ru/2017/11/20/2328
  Не скажу, что обертонная группа полностью освоена. На пути добавления колебаний могут быть найдены новые возможности. Этот путь нужно ещё исследовать.


        ОСОБЫЕ ТЕХНИКИ
 
  Кроме использования трёх основных групп и группы обертонов, в синтезе звука могут использоваться некоторые общие техники, включённые своими алгоритмами в текст программы.
  Это
техника создания аккордов - http://www.proza.ru/2016/03/28/350
техника работы с ревербератором -
http://www.proza.ru/2016/03/07/1229    http://www.proza.ru/2016/06/17/592
  а также мелкие и просто реализуемые
фильтр для компенсации постоянной составляющей сигнала, преобразующий амплитуду по следующему алгоритму - A=A+AK : AK=AK-(1-DK1)*A
и метод "тяни в плюс, толкай в минус" - тянущий вверх положительные части колебания в одних периодах, и толкающий вниз отрицательные части колебания в других периодах, в соответствии с содержимом строки Apm$. Эту строку, создающую призвук удара молоточка о струну, можно видеть в сценарии звука фортепьяно.

  Об аккордах поговорим сразу же, а о ревербераторе - чуть попозже.


        ИЗВЛЕЧЕНИЕ АККОРДОВ И ПОМЕТКИ В ПАТРИТУРЕ

  Создание аккордов путём сложения амплитуд нескольких частот при одном заходе в звуковую функцию оказалось неожиданно простым делом. Есть, правда и нюансы. Дело в том, что параметры звуковой функции настраиваются именно на опорную ноту аккорда - на ту, частота которой указывается при вызове звуковой функции. Параметры для других нот аккорда могут оказаться не совсем верными.
  Например, обертоны, создаваемые группой Рельеф для опорной ноты низкого тона, для других могут оказаться слишком сильными, и поэтому высокие ноты аккорда окажутся излишне звонкими. И наоборот - если за опорную взять ноту высокого тона, то ноты низкого тона в аккорде окажутся тусклыми.
  Обертоны из обертонной группы присоединяются только к опорной ноте аккорда, другие ноты аккорда будут этой поддержки лишены. Этот недостаток можно исправить, но потребуется усложнение программы, что приведёт к уменьшению скорости счёта. И пока не ясно, стоит ли это делать.

  Вместе с тем, интерпретация аккордов, не как собрания отдельных нот, а как совокупность нот пристёгиваемых к опорной ноте, сильно упрощает работу с партитурой и позволяет сосредоточиться на выразительности общего звука. Некоторые примеры работы с аккордами мы рассмотрим сейчас на примере начальных строк "Старинной французской песенки".

правая рука
 1 ================= TFP.TXT   VEL= 32000
 R=8 H=2.5 Ar=.5 UEa=1
F= 293.66 T1= 10349  T2= 211 t5000 Ре

 G=5/0-09
F= 392     T1= 10349  T2= 211 < Соль
F= 440     T1= 10349  T2= 211   Ля
 G=/0-08
F= 466.16 T1= 10349  T2= 211 < t1000 Си бемоль
 G=/0-10
F= 523.26 T1= 10349  T2= 211 < t3000 до

 G=/0-16
F= 587.32 T1= 31046  T2= 634  t5000 ре
  H=2.5
F= 587.32 T1= 10349  T2= 211 g

F= 523.26 T1= 10349  T2= 211
F= 587.32 T1= 10349  T2= 211
F= 622.26 T1= 10349  T2= 211
F= 523.26 T1= 10349  T2= 211
и так далее ...

  Перед вами фрагмент партитуры для правой руки со сделанными на ней пометками.
  Я разделил партитуру на такты пустыми строками только для удобства чтения. Также написал названия нот. Когда Вы привыкнете отличать ноты по частотам, то такой комментарий Вам не понадобится.
  Отметим - что добавлено в партитуру, в сравнении с той пустой, которая была получена от программы Пианола?

  Во-первых, появилась надпись "правая рука". Она необязательна. В тексте партитуры можно писать любые комментарии кириллицей в пустых строках или после их окончания.
  С цифрами сложнее. Цифры, идущие через пробел, добавляются к предыдущему численному указанию, если они могут так интерпретироваться. То же относится к заглавному или строчному латинскому E, которое может интерпретироваться как указание на период числа. К слову "exo" латиницей это не относится, поскольку случайно понятый период числа оказывается равным нулю.

  Посмотрим на первую строку партитуры.
R=8 - указание на номер сценария развития звука (номер инструмента). 8 это фортепьяно
H=2.5 - громкость умеренно тихая
Ar=.5 - исполнение мягкое, громкость обертонов снижена наполовину
UEa=1 - параметр EA=1, пички синусоиды при мягком исполнении не обостряются.
  Алгоритм обострения синусоиды следующий - от горбика синусоиды берётся EA, остальное достраивается до 1 возведением горбика в 4-ю степень.
  По умолчанию, или если указать UEa=0 берётся EA=.3 и затем эта величина на низких частотах корректируется.
  Есть и другой сценарий звука фортепьяно (R=2), в нём звук попроще - звук разбитого пианино. Этот звук корректируется изнутри в зависимости от частоты только в отношении общей громкости, громкости стука клавиш и длительности звучания нот. Из партитуры, по тембру, он не корректируется никак.
  Вы поняли - для каждого сценария есть свои примочки.
  Но есть и общее - то, о чём я расскажу ниже.

  Посмотрим на второй такт нот "Старинной французской песенки". И в правой, и в левой руке идёт проигрыш восьмыми нотами легато. И в левой же руке мы видим половинную ноту.
  Компьютеру как бы не хватает "третьей" руки? Чтобы не вводить третью партитуру, восьмые ноты левой руки мы прикрепим к восьмым правой руки, организовав аккорды. Пианист аккорды одной рукой легато вряд ли сыграл бы, но компьютер это может!
  Это я к тому, что организовывая озвучивание музыкальных произведений, иногда приходится делать для них небольшое переложение, учитывая специфику и разницу извлечения звука музыкантом и структуру этого же процесса, происходящего на компьютере.
 
  Итак, организуем в правой руке последовательность аккордов легато.
  Первый аккорд в нашей последовательности Соль-\Си_бемоль - от верхней опорной ноты на 9 полутонов вниз. Можно обозначить этот аккорд как G=/-09.
  А можно ли, чтобы верхняя нота звучала громче нижней. Легко. Повторим ноту Соль - создадим последовательность 3-нот: Соль-Соль-\Си_бемоль, обозначив аккорд G=/0-09

  При назначении аккорда положительное число полутонов, меньшее 10-ти, можно обозначать одной цифрой. В других случаях указывается знак (плюс или минус) и число из 2-х цифр за этим знаком. Аккорд снимается указанием G= или строчной "g" в строке следующей ноты. Там же можно делать и аккордное назначение, чтобы не тратить для него строку, предваряющую ноту.

  Чтобы сделать начало нашего аккордного пассажа ещё более естественным, используется обратное арпеджиато - G=5/0-09
  Обычно арпеджиато играется снизу вверх, но у нас оно играется в последовательности записи нот в аккордном назначении. То есть, начинает звучать нота Соль, через 5 периодов звук ноты Соль усиливается, а ещё через 5 периодов к звуку опорной ноты подключается звук ноты Си_бемоль.
  А ведь точно также играет пианист - он нажимает клавишу Соль сильно, молоточек идёт к струне быстро, клавишу Си-бемоль он нажимает слабо, и струны этой ноты слегка запаздывают со своим звуком. Вот такие тонкие нюансы можно создать, используя партитурные пометки.

  Другие нюансы выразительной игры создаются маневрами с громкостью и длительность звука.
  Значки <, <<, > и >> увеличивают и уменьшают громкость звука.
  "t" с указанием числа семплов увеличивает время звучания ноты, причём с правой руки это указание передаётся и на левую руку, поэтому локальные замедления и убыстрения удобно создавать, находясь в партитуре правой руки.

  Посмотрим на начальные строки партитуры левой руки для "старинной французской песенки":

 1 ================= TFL.TXT   VEL= 32000
 S=1.3 R=8 H=2 UX=.5 Ar=.5
 L= 10560
F= 196     T1= 41395  T2= 845 l
F= 196     T1= 20698  T2= 422 n
F= 196     T1= 20698  T2= 422
F= 311.13 T1= 20698  T2= 422
и так далее ...

  Мы видим здесь указание на замедление темпа S=1.3 - в такое количество раз увеличится длительность нот и посленотных пауз.
  Длительность паузы L= 10560 будет не такой, а большей. Поскольку чтение из файла TFL.TXT опережает чтение из файла для правой руки, то изменение темпа S=1.3 будет учтено при обработке длительности первой ноты в партитуре правой руки.
  Аналогично - поскольку одновременно появляющиеся ноты появляются всё же сначала в левой руке, то изменение длительности первой ноты правой руки по указанию t5000 будет влиять на длительность паузы L= 10560. Итак, эта длительность будет 10560*1.3+5000*1.3
  Результат - "Старинную французскую песенку" из Детского альбома П.И.Чайковского можно послушать здесь - http://yadi.sk/d/7dU1Z2043YJ8u4
  Когда будете слушать, обратите внимание на выразительную слышимость стаккато левой руки в конце третьей строки - специально в этом месте, партитурным указанием UV=1 были включены квазиобертоны, поддерживающие низкий тон.


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

  Теперь, когда стало ясно, как делается звук, и как используются партитуры, можно поговорить о том, как всё устроено. Кое-что об этом можно прочесть здесь -http://www.proza.ru/2017/08/27/2000

  Собственно программа Трио выполняет чисто техническую задачу - озвучивает то, что написано в партитурах. Всего партитур может быть три, и находятся они в файлах TFA.TXT - партитура альта, TFL.TXT - партитура левой руки и TFP.TXT - партитура правой руки.

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

  МУЗы различаются по номерам. Каждый, вместе со своей звуковой функцией имеет в оркестре ТРИО своё место, свой блок. Называются блоки также как и музы - MUZ_1, MUZ_2 и MUZ_3. Как вы уже догадались, МУЗ3 читает партитуру правой руки, а МУЗ1 - партитуру альта.
  В блоке с названием MAIN находится Дирижёр. Надо же кому-то МУЗами руководить, палочкой на них поочерёдно указывая - а ну-ка, неси амплитуду для очередного семпла. Получив амплитуды от каждого музыканта, дирижёр их складывает и распределяет по динамикам - одна комбинация амплитуд пойдёт в левый динамик, другая - в правый. Полученные семплы он накапливает в памяти. Когда накопится 100 тысяч семплов, он их добавляет в заранее открытый файл PROBA.WAV

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

  В программе есть ещё три модуля. С первым Вы общаетесь непосредственно, как только запустите программу Тrio_Wav_Звук_Т, так она называется. В окне есть всякие кнопочки, которые можно нажимать левой кнопкой мыши.
  Клик на нижнем правом уголочке расширит окно, и Вы сможете узнать кое-что о программе, нажимая кнопочку "Просмотр". А кликнув кнопочку "Т", перейдёте в техническое расширение программы. И там Вы тоже можете поэкспериментировать.
  В результате Вы лучше поймёте, что программа может, и как с ней работать.
  Следующий модуль с названием "Звук" содержит не только бикающие сигналы, но и тексты комментариев.
  Все модули Вы сможете рассмотреть, если скачаете их отсюда http://yadi.sk/d/wmi511zH3MEmEv
  Даже если у Вас нет Визуал Бейсика, но Вы проявляете интерес к программированию, Вы можете открывать тексты модулей, используя Блокнотик. Что касается программы Тrio_Wav_Звук_Т, то она работает просто так, сама по себе.

  Модуль "Функции" содержит общие функции, в частности, алгоритм группы обертонов, а также однотипные тексты трёх ревербераторов, для каждого МУЗа - своего. Ревербераторы различаются только названиями для обращения к ним - FNRRn(_,_), именами строк с информацией для так называемого процесса дублицирования - REVn$, и наименованием массива, в который забрасывается эхо - RRn(_).
  Такие названия приняты для ревербератора, принадлежащего первому МУЗу.
  В названиях для МУЗа_2 букву "n" нужно заменить на "m", а МУЗ правой руки обходится без буквы на этом месте.
  Теперь самое время поговорить об устройстве ревербератора.


     РЕВЕРБЕРАТОР В ПРОГРАММЕ ОЗВУЧИВАНИЯ ТРИО

  Представьте себе, что Вы идёте по круговой дорожке в парке и, по некому плану, в определённые точки бросаете далеко вперёд себя на дорожку камни разного размера, но пропорциональные той амплитуде звука, которую Вы слышите. А потом, пройдя по дорожке и слыша уже другой звук, находите заброшенные камни и прибавляете их амплитуду к амплитуде слышимого звука. 
  Вот так и работает цифровой ревербератор.
  Для ревербератора каждого МУЗа в программе ТРИО отведён числовой массив с 5000 ячейками. В ячейке с индексом 0 хранится число точек заброса. В ячейке с индексом 1 - расстояние, на которое нужно забрасывать амплитуду в несколько ослабленном виде. В ячейке с индексом 2 - процент ослабления забрасываемой амплитуды.
  И так далее. Ячейки с номерами 1-200 отведены для этого дела.
  Ячейки 201 - 5000 кольцуются, и представляют из себя дорожку по которой идёт посетитель парка. Взяв амплитуду нового семпла, пока ещё без эха, он делает шаг - продвигается вперёд на одну ячейку, смотрит в план заброса и забрасывает ослабленные копии амплитуды вперёд, в соответствии с планом, а если он настроен на многократное эхо, то в свои забросы он добавляет часть того, что находит у себя под ногами.
  Затем, амплитуду, найденную под ногами, он добавляет к текущей амплитуде и отправляет результат дальше. Так к звуку программным путём добавляется эхо.

  Ясно, что план заброса эха должен указываться в сценарии. Посмотрим, как это сделано в сценарии развития звука фортепьяно:

     RR(0) = 0: V = FNRR(0, 1006.4): V = FNRR(0, 2006.4) 'заброс эха
     If UW3 > .5 Then B = UW3 / 10: V = FNRR(0, 3206 + B ): V = FNRR(0, 4506 + B )
     V = FNRR(30, -9)                ' \полнозвучное эхо

  Первым идёт оператор RR(0)=0, сбрасывающий все ранее сделанные установки эха.
  Следующими двумя обращениями к ревербератору устанавливаются две точки заброса эха - на 1006 и на 2006 семпла вперёд. Некратные адреса точек заброса несколько размывают эхо, не позволяя точно совпадать максимумам звука, если такие найдутся. Оба заброса делаются с амплитудой 40% по отношению к амплитуде звука, пришедшего на ревербератор.
  Указанием в сценарии UW=1 2 3 или 4, можно добавить ещё две дальние точки заброса (режим полнозвучного эха).
  Последнее обращение указывает на то, что 30% считанного из ревербератора эха, вновь будет забрасываться по установленным точкам. Этим достигается эффект многократного эха.
  Сказанное относится к сценарию звука фортепьяно №8. Что касается сценария №2, то в нём эхо не предусмотрено - в разбитом пианино и педаль отсутствует.))
  Итак, параметры эха задаются в сценарии, но где же, и когда эхо появляется?

  Непосредственно работает с ревербератором не звуковая функция, а музыкант - МУЗ. Он включает и выключает ревербератор, извлекает из него эхо и присоединяет эхо к амплитуде звука. Включение ревербератора происходит по тем указаниям, которые МУЗ читает в партитуре - латинскими буквами:
 exo=1 включает эхо на время звучания ноты, совмещая её звук со звуком эха
 exo=2 эхо продлевается на паузы после ноты
 exo=3 эхо звука предыдущей ноты переходит и на следующую, смешиваясь с её звуком
 exo=0 эхо выключается (начальное состояние, по умолчанию)
  ехо=4 особый режим для экспериментов - слышно только эхо.

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


     ИЗУЧЕНИЕ ЗВУКА

  Методы, развитые в проекте, ориентированы на создание звука не абы как, а предполагают предварительное и тщательное изучение звука. Сюда относится внимательное рассмотрение осциллограмм звуков реального инструмента, моделирование звука с помощью программы ТРИО, прослушивание и сравнение полученного звука с реальным.
  По ходу этого дела выявляются существенные черты звука, видимые на его осциллограмме, - черты, определяющие характерный тембр музыкального инструмента, в отличие от черт случайных, для синтеза звука необязательных.
  Примером такого исследования может служить исследование особенностей звука аккордеона - "Тайна звука аккордеона" http://www.proza.ru/2015/05/13/876 
  В этом исследовании, в соответствии с наблюдаемыми особенностями осциллограмм, выдвигаются априори предположения об обертонном составе звука, и эти предположения тут же проверяются практически.
  Основная идея состояла в том, что характерный, узнаваемый тембр аккордеона создают неполные возобновляемые обертоны, разные в первом и во втором полупериодах звукового колебания, и кроме того находящиеся в неком противоречии друг к другу в отношении своих фаз.
  То есть, не создавая точного квазиобертона, обертонные колебания полупериодов вместе с тем и не поддерживают друг друга. В противном случае обнаруживался слышимый высокий обертон, более характерный для свиста свирели, например.
  Прослушать синтезированные звуки аккордеона разного тембра можно тут - http://yadi.sk/d/3sibB7Hh3F9TRA

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

  Меняя детали сценариев программы ТРИО можно изучать многие особенности восприятия музыкального звука слушателем.
  Так, выяснилось, что для девиации параметров годятся частоты диапазона 6-14 Гц - ниже слышимых человеческим ухом, однако более высокие чем те, которые используются для вибрато. Причём ход девиации желательно увести от простой периодичности, например, проводя девиацию нескольких параметров на разных частотах. Вместе с тем, использование в девиации не периодического, а случайного движения, ухудшает результат. Видимо, наше ухо неслышимую гармоничность девиации как-то отслеживает, и именно она присуща естественному звуку музыкальных инструментов.
  Также было найдено, что наилучший результат получается при использовании для девиации не синусоидальной, а треугольной периодической функции.


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

  Файлы с нотными записями и файлы с партитурами от программы Пианола, представляют собой носитель информации о музыке, подобный обычным нотам. С тем отличием, что информацию из этих файлов удобно читать как человеку, так и компьютеру. Эти же файлы вполне могут быть источником информации для озвучивания не только программой ТРИО, но и каким-нибудь другим способом.
  Простейший способ даёт сама программа Пианола. Кнопочка "play" не только проигрывает музыкальную запись целиком, но и заодно создаёт в текущем каталоге файл P_M.WAV, который затем, с помощью простого звукового редактора Wave Editor можно перевести в обычный формат mp3. Таким образом Вы можете создать, например, одноголосную мелодию для своего телефона.
  Программа Манипулятор WAV файлами, входящая в число упомянутых выше, легко может соединить вместе два файла - одноголосия, полученные отдельно для левой и правой руки. Для этого понадобится, правда, сначала перевести файлы P_M.WAV в моноформат,  а затем соединить их в стерео по разным дорожкам. Но и это легко делает манипулятор WAV файлами. В результате у Вас будет мелодия уже с двумя звучащими голосами.
  Можно продолжить этот процесс и получить многоголосую мелодию, правда, исключительно со звуками фортепьяно, и без тех нюансов исполнения, на которые способна партитурная запись.   

  Другой путь, который напрашивается, это перевод партитурных записей в МИДИ формат.
  О МИДИ формате написано тут - http://www.proza.ru/2017/10/28/1737
  http://www.proza.ru/2017/03/16/1463  и  http://www.proza.ru/2017/10/22/168
 Поговорим о нём немного и здесь.

  Заглянув в Википедию, узнаем следующее - //MIDI (англ. Musical Instrument Digital Interface — цифровой интерфейс музыкальных инструментов) — стандарт цифровой звукозаписи на формат обмена данными между электронными музыкальными инструментами.
  Интерфейс позволяет единообразно кодировать в цифровой форме такие данные как нажатие клавиш, настройку громкости и других акустических параметров, выбор тембра, темпа, тональности и др., с точной привязкой во времени. В системе кодировок присутствует множество свободных команд, которые производители, программисты и пользователи могут использовать по своему усмотрению.
  Последовательность MIDI-команд может быть записана на любой цифровой носитель в виде файла, передана по любым каналам связи. Воспроизводящее устройство или программа называется синтезатором (секвенсором) MIDI и фактически является автоматическим музыкальным инструментом.//

  Несмотря на то, что МИДИ стандарт существует уже 36 лет, он всё ещё находится на плаву и развивается. Вместе с тем, стремление к универсальности и долгое существование сделали этот стандарт весьма запутанным. И именно по причине "присутствия множества свободных команд, которые производители, программисты и пользователи могут использовать по своему усмотрению". Я не сомневаюсь в способностях программистов, но пользователи не семи пядей во лбу, чтобы свободно чувствовать себя среди непонятных кодов МИДИ последовательности. Потому пользователи не творят звук, а берут то готовое, что предоставляют им фирмы. Действует знакомый закон - мы за вас думаем, а вы покупайте.
  И не удивительно, что звук секвенсоров - и скрипичный, и фортепьянный, и даже звук аккордеона, оказываются не лучше звука, создаваемого программой ТРИО, а иногда и хуже того.
  Не удивительно, ещё и потому, что программирование за 36 лет далеко вперёд шагнуло, и за счёт изощрённости по части алгоритмов, и по части быстродействия.

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

  Но не стану так уж обижать МИДИ формат.
  Программа Конвертор http://yadi.sk/d/Ul0YSNtp3YPQP7 переводит партитуры в МИДИ последовательность, годную для проигрывания. При желании её можно отредактировать на каком-нибудь подходящем для этого редакторе.
 
  Естественно, что при переводе в МИДИ формат некоторые партитурные пометки, обеспечивающие выразительность звука, не будут учтены. Но основное - изменения громкости, увеличения длительности звучания нот, аккордные назначения, в МИДИ последовательность переводится.
  Есть и специальный значок настройки МИДИ звука - mW.V ( W и V целые числа: W - номер контроллера, V - его значение). Например, указание m1.9 приведёт к появлению последовательности  B№ 01 72 в байтах, составляющих МИДИ запись.
  Здесь № это номер канала - 1 для партитуры альта, 2 -для лев. 3 -для правой руки.
  В результате выполнения этой команды в канале будет установлено вибрато с амплитудой 0.9
  Конвертор имеет техническое расширение, позволяющее получать информацию о МИДИ файле, в частности делать его дамп с указанием имеющихся нот, и сворачивать дамп обратно - в МИДИ последовательность. Кроме того можно объединять некоторые МИДИ файлы.

   Как МИДИ запись будет звучать, легко прослушать на встроенном системном плеере или использовать Notation Player, который показывает запись из МИДИ файла в форме нот. Такое может пригодиться для создания иллюстраций в клипе. Кроме того и звук у этого плеера может оказаться лучше.  Адрес для скачивания программы Notation Player -
http://www.notation.com/DownloadNotationPlayer.php
  Указанный плеер интересен и в том отношении,  что, демонстрируя ноты, он позволяет сличать их с исходной нотной записью. Таким образом,  некоторые ошибки могут быть легко выявлены.
  Демонстрация нот МИДИ файла в Notation Player имеет маленький нюанс – строки для правой, левой руки и для партии альта размещаются друг под другом в той последовательности, в которой появляются первые звуки из партитур. Поэтому, если левая рука опережает правую, или начинает игру с ней вровне, то сверху вы увидите линеечки с басовым ключом, а снизу – со скрипичным.
Дело легко исправляется, если вставить в партитуру правой руки, самой первой строкой
 F=400 T1=100 R=8 H=0 то есть короткий неслышимый звук, а в партитуру левой руки первой строкой записать паузу той же длительности – L= 100

____________

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

Для практической работы Пианола и Трио тут - http://yadi.sk/d/FBHosWpK3MLC6T
Вам понадобится также редактор Wawe Editor, можете скачать его отсюда -
http://yadi.sk/d/aUwPvvlDkPXqq Если будете с помощью этого редактора переводить файл из WAV формата в mp3, и захотите, чтобы перед началом записи была пауза, то не вставляйте её как пустое место, вставьте паузу, имеющую очень тихий звук, взяв её, например, отсюда - http://yadi.sk/d/wS-PA9Ob3YQ7mk иначе время звучания записи может быть указано неверно.
============== Листинги программ (VB6):
Пианола - http://yadi.sk/d/O99BeORs3NG4z5
Трио - http://yadi.sk/d/4YB1q5Hj3NLAn4
Конвертор в МИДИ - http://yadi.sk/d/DsxR_EHN3NhDPs
Утилита для работы с WAV файлами - http://yadi.sk/d/bpW5I50k3NvNyu
==============
Ноты и партитуры, "Старинная французская песенка" - http://yadi.sk/i/PDPRtHgL3YQtui
_____________
  26.06.2018

Некоторые статьи по музыкальному проекту, опубликованные на сайте Стихи.ру -
 Гармония звуков - http://www.stihi.ru/2015/01/19/8488
 От нот к музыкальному звуку - http://www.stihi.ru/2016/09/25/1613
 Шуман. Сказочные картинки - http://www.stihi.ru/2016/10/21/5366


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

Желаю Вам дальнейших гармонических изысканий! Приводя жизнь к гармонии, Вы делаете мир прекрасней. Это задача любого человека, кто взял в руки краски, или смычок, или ... нотную клавиатуру... В цепи случайностей углядеть строгую последовательность не каждому удаётся. Вернее, только единицам. А потом идёт труд по распространению этих открытий, так чтобы не сочли за сумасшедшего) На более низком уровне, чем Ваш, мне это знакомо, поэтому я так и резонирую с Вашим изысканием.

В детстве был отдан (именно так - отдан) в музыкальную школу "на баян")) Как я этого не хотел! Отдал этим урокам два года младой жизни, когда сверстники играли в футбол и гоняли лапту во дворе... Дааа... Понимание музыки пришло позже, а тогда я категорически отказался заниматься, за что был отпорот матерью и оставлен в покое... Завидую Вашему сыну(по-хорошему), что у Вас приятельские отношения и понимание необходимости занятий музыкой. Вообще, импонирует Ваше сочетание музыки и научной деятельности.

С уважением!

Николай Гачин   23.08.2019 10:12     Заявить о нарушении
Спасибо, Николай. Действительно, музыка создаёт некую другую сферу нашей жизни, делает жизнь более интересной и наполненной. Как и любое другое увлечение. В течении 25-лет я увлекался кроссами - бегом по утрам по шоссе и по лесу. И это была тоже как бы вторая жизнь.
В Нижнем Новгороде я был,и не один раз. Привозил и устанавливал в клинику лазерную офтальмологическую установку. У меня было время побродить по городу. Красивый город, живописная холмистая местность. Заросший деревьями Горький, смотрящий вроде бы на Волгу. А Волги-то за деревьями и не видно. В то время мост метро через Оку строился.
Хорошие воспоминания остались.

Геннадий Маков   23.08.2019 10:36   Заявить о нарушении
Честно говоря, я вообще удивляюсь жизнью. Родился в прошлом веке, знал, что наша страна самое первое и передовое государство в мире. Рос с этим знанием, а потом уход в армию, распад Союза, государства такого больше нет... Скорость событий увеличилась и, если на становление прежнего государства у нашего народа было семьдесят лет, то на построение нынешнего столько времени не дали. Надо было перестроить армию, общественные взгляды, идеологию, и прочее, в том числе науку. Но без встраивания в систему геополитических отношений со всем остальным миром этого сделать невозможно. Наверно, поэтому было попущено (попущение) разложение старых государственных институтов, а вместе с ними и нравственных устоев прежнего общества.

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

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

С уважением

Николай Гачин   23.08.2019 11:19   Заявить о нарушении
На это произведение написаны 3 рецензии, здесь отображается последняя, остальные - в полном списке.