Простая программа для создания музыки
В одной из таких программ было примечательно то, что мелодия сохранялась в текстовом виде. Сохранялась она в соответствии с МИДИ правилами - указывается номер ноты и время начала её звучания, а затем - её же номер и время окончания звучания.
Если несколько нот составляют аккорд, то мы включаем их вместе и выключаем тоже вместе. А если нам нужно изобразить арпеджиато, то это тоже делается легко. Однако заметьте, аккорды и арпеджиато не такое уж частое явление, гораздо чаще одиночные ноты идут чередой, и в этом случае совершенно излишне указывать время включения и выключения для каждой ноты - если ноты До-Ре-Ми-Фа имеют одинаковую длительность, то можно просто написать CDEF и не заморачиваться по поводу времени включения и выключения каждой из этих нот.
О ПРОГРАММЕ ПИАНОЛА
Программа Пианола_М не использует МИДИ протокол, и поэтому музыка записывается в текстовой форме гораздо проще. Каждая нота, имеющая размер 1/4 звучит полсекунды, а ноты первой и второй октав изображаются латинскими буквами CDEFGAB и cdefgab.
Знаки диез-бемоль-бекар (#-0)ставятся после латинских букв. Такие нотные обозначения привычны и понятны. То, что написано в этой строке вы вполне можете прочитать и понять:
\B/ GFED# <E7>\B/ BAGF# <G7>E c7B'A7>G FG<A^c!
Слежи \/ означают спуск на октаву вниз и подъём на октаву вверх. Знаки <> увеличивают и уменьшают длительность нот вдвое. Крыша после ноты A^ увеличивает вдвое её длительность, а штрих B' сокращает длительность в 2 раза.
Цифры, стоящие после нотных обозначений тоже меняют длительность нот - цифры (4-1) уменьшают, а цифры (5-9) увеличивают её. Цифра 7 увеличивает длительность в полтора раза - в обычной нотации это точка после ноты. Цифры 8 или 9 это две или три точки.
Базовый нотный язык, которым пишется текст, вполне эквивалентен обычной нотации. Его мнемоника удобна и понятна, кроме того, в программе имеются подсказки, а многочисленные примеры раздела Help помогают ознакомиться со всеми тонкостями и случаями использования этого языка на практике.
Программа Пианола_М предоставляет в распоряжение пользователя 50 строк, которые можно заполнить нотными обозначениями и затем проиграть их последовательно. Этому соответствуют примерно 7 минут музыкального звука. Каждая строка к тому же имеет 8 слоёв с номерами 0-7, их тоже можно заполнить нотными знаками и проигрывать последовательно, начиная от нулевого слоя до установленного.
Однако основной режим работы Пианолы_М это совмещение слоёв. В этом режим семплы, получаемые от слоёв, накладываются друг на друга. В результате создаётся как бы ансамбль из нескольких инструментов, играющих одновременно. Такой небольшой оркестрик. Создать совместное звучание несложно, нужно только отладить отдельно звук в каждом слое и позаботиться о синхронизации работы музыкантов, они должны попадать своими звуками в такт друг другу. Если музыка ритмичная, то сделать это легко, однако если вы захотите сделать некие выразительные замедления, то за синхронизацией приходится следить. Для подобного контроля в программе есть удобные средства.
ОСОБЕННОСТИ ФУНКЦИОНИРОВАНИЯ ПРОГРАММЫ
Программа «Пианола_М» отличается от обычных секвенсоров тем, что собственно музыкальный звук она не производит. Она делает запись этого звука, не воспроизводя его онлайн. И это отличие существенное и коренное.
Если в обычном секвенсоре, например, создаётся аккорд, то для каждой ноты этого аккорда требуется отдельное устройство. Оно отрабатывает нажатие и отпускание клавиши, или особенности дыхания, и так для каждого инструмента и для каждой исполняемой на нём ноты.
Этих устройств много, и работают они одновременно или попеременно, но им следует торопиться - каждое из этих устройств создаёт поток семплов, семплы эти суммируются, превращаются в аналоговые сигналы, которые поступают в левый и правый динамики ноутбука.
Вы представляете себе, какая суета происходит на аккорде из пяти нот? Программа Пианола работает совершенно не так. Она накапливает семплы в буфере, а не спешит направить их в динамик.
Она записывает семплы первой ноты аккорда в буфер от её начала и до конца так, как если бы эта нота в аккорде была одна. Затем программа возвращается в начало этой ноты, и прибавляет семплы второй ноты к семплам первой ноты. И так - пять раз.
Спешить совершенно не к чему. Когда буфер, а буфер у нас большой, наполнится семплами нот, тех, которые находятся в строке, тогда программа приступает к разгрузке буфера - она начинает с начала буфера, и небольшими порциями считывает семплы, и добавляет их в звуковой файл.
И так, постепенно, строка за строкой, звуковой файл будет наращиваться, а когда запись окончится, то файл будет закрыт, программа откроет проигрыватель, укажет проигрывателю на этот файл, и только тогда мы услышим результат нашей работы.
Время задержки между началом счёта и началом звука при обработке одной строки может составлять десяток секунд, но это вполне приемлемое время - прослушав строку, мы можем тут же отредактировать её, и вновь проиграть. Точно так же и с аккомпанементом, находящимся в другом слое строки, точно так же и со всеми другими строками.
В 90-е годы, когда создавались самые первые секвенсоры, компьютеры работали медленно. Создавать музыку «не спеша» было непозволительной роскошью, потому люди и придумали МИДИ протокол на все случаи жизни - и тогда, когда музыка играла вживую, и тогда, когда живого звука не требовалось, а нужна была лишь её запись.
Получение множественного звука онлайн требует сложных и развитых аппаратных средств. Большую часть работы по созданию музыки на современном компьютере выполняет звуковая карта, и от её возможностей зависит качество получаемого онлайн звука. У Пианолы таких проблем нет совершенно - она не делает живой звук. Она делает только его запись.
Естественно, что Пианола устроена много проще любого секвенсора, а результат-то получается очень даже неплохим.
КАК РАБОТАЕТ ПРОГРАММА ПИАНОЛА
Чтением нот в строке занимается «Интерпретатор строки». Интерпретатор, это отдельная подпрограмма, можно назвать её блоком (см.иллюстрацию). Интерпретатор знает мнемонический нотный язык, он читает символы, записанные в строке, определяет частоты ноты F и длину посленотной паузы T, и передаёт эти сведения «Распорядителю».
Кроме того интерпретатор выставляет многочисленные флаги, помогающие понять, каким способом следует создавать звук, по какому сценарию его развивать, и как присоединять этот звук к другим звукам.
Имеется, например, флаг, указывающий на нажатие педали и на глубину этого нажатия, и блок «PLAY» отрабатывает эту информацию.
Другой флаг указывает на наличие и на структуру аккорда.
Специальный флаг указывает на инструмент, на котором играет музыкант. Если такой инструмент не выбран, то мы ноты будут исполнены звуками штатного фортепьяно.
Блок «Распорядитель» разделяет паузы и ноты - он сначала отправляет блоку «PLAY» информацию F,T указывая на частоту и длительность звука ноты, а затем отправляет 0,T указывая параметром T на длину посленотной паузы.
Блок «PLAY» работает в содружестве с блоком «Звуковая функция».
Если блок «PLAY» обрабатывает ноту, то он сначала обращается к «звуковой функции» с параметром F, указывая на частоту звука, а затем много раз обращается с параметром 0. И это означает, что звук следует развивать. Получив очередной 0, «звуковая функция» возвращает амплитуду очередного семпла, а блок «PLAY» записывает эту амплитуду в буфер_М.
Но вот, строка закончилась, и накопленные в буфере семплы следовало бы записать в звуковой файл или переписать их, поместив в другой буфер. Этот другой буфер называется «буфер_В» и он по размеру немного больше, чем «буфер_М».
В программе имеется кнопка с названием «тонкая регулировка темпа», от неё зависит рабочий размер буфера_М. Если на кнопке выставлено число 1, то размер буфера составит 960000 семплов (показано зелёным). На зелёном фоне показаны заполняющие буфер семплы (сверху - для левого динамика, а снизу - для правого), по рисунку видно, что буфер заполнен до уровня 0.75.
В случае, если проигрывается один слой и одна строка, и проигрывание закончено, буфер_М разгружается через буфер_С - туда переписывается каждый зелёный квадратик, начиная с первого и кончая тем, в котором закончилась запись семплов.
Каждый раз после такой переписи буфер_С сбрасывается - его содержимое отправляется в звуковой WAV файл. В конце процесса WAV файл закрывается, и в нём оказываются семплы музыки с небольшой паузой в конце.
Если же проигрывается несколько слоёв, то процесс разворачивается иначе - после проигрывания нулевого слоя содержимое буфера_М переписывается в буфер_В.
Затем проигрывается следующий слой, и после окончания этого проигрывания семплы буфера_М не просто переписываются, а складываются с семплами буфера_В в некой пропорции, сохраняющей равный вклад слоёв и не позволяющей звуку расти чрезмерно быстро. Если в этой ситуации буфер_М оказывается заполненным не полностью, то процедура сложения всё равно затронет весь буфер целиком - в оставшейся незаполненной части содержатся нули, и они будут интерпретироваться, как паузы.
Иная ситуация создастся, если в буфере_М совсем ничего нет. Тогда фаза сложения будет пропущена, амплитуды в буфере_В не будут ослаблены, и в результате относительная громкость строки возрастёт.
В процессе переписи и сложения амплитуд, уровень наибольшего заполнения слоёв выявляется и запоминается.
После того, как в буфер_В будут добавлены семплы последнего проигрываемого слоя, начнётся разгрузка буфера_В. В процессе этой разгрузки участвует маленький буфер_D, он рассчитан на 32000 семплов - такими порциями содержимое буфера_В переносится в буфер_С, вплоть до того момента, когда буфер_D достигнет уровня наибольшего заполнения. Тогда содержимое буфера_D записывается в начало буфера_В, уровень заполнения буфера_В устанавливается по уровню наибольшего заполненя, а остальные ячейки буфера_В обнуляются. Заодно обнуляются и все ячейки буфера_М.
Теперь всё готово к проигрыванию слоёв следующей строки.
Процесс переписывания семплов из одного буфера в другой происходит очень быстро и подобные манипуляции практически не задерживают счёт.
В программе Пианола_М работа с буфером_М является важным аспектом создания музыки, и особенностям этой работы следует уделить внимание. Говоря простыми словами, нужно понимать, как семплы накапливаются в буфере, и как они складываются друг с другом в аккордах. Если такое понимание будет, тогда и работа пойдёт успешно.
ЗАКЛЮЧЕНИЕ
Программа «Пианола_М» организует создание музыки на принципах отличных от привычного функционирования других подобных программ. Она не создаёт музыкального звука онлайн. Вместо этого она записывает семплы создаваемой музыки в звуковой WAV-файл, который можно проигрывать стандартными способами.
Для накопления семплов в программе используются буферы. Такой подход позволяет перейти от множественного создания звука к поочерёдному, что сильно упрощает функционирование программы в целом, и создаёт удобства для текстовой записи музыки в мнемонической форме.
Особый мнемонический язык Пианолы является полным эквивалентом обычной нотации. Более того, этот язык имеет средства, позволяющие изменять звук музыкальных инструментов, внося в исполнение нот разнообразные штрихи и оттенки.
Выбор инструментов в программе Пианола_М не очень большой, но музыку она способна создавать выразительную. Главное это то, что она проста, удобна и полностью автономна.
Размен программы 1.7 Мб и она не требует для своей работы никаких дополнительных средств.
_________
2.05.2025
Свидетельство о публикации №225050201426