Ну вот собственно мы и подошли к самому интересному. С сегодняшнего дня, мы постепенно соберем гранулятор. Прежде чем пояснять, чего да как делать, я очень хочу поблагодарить товарища OSCII, который с радостью отвечал на мои вопросы по ходу проектирования, а так же предоставил прототип по которому собственно и создавался данный гранулятор.
Кстати, если кто найдет ошибки по проекту или тексту, сообщайте пожалуйста любым удобным вам способом.
Для тех кто заинтересовался теорией рекомендую начать отсюда.
В данной главе предлагается к рассмотрению проектирование гранулярного синтезатора в среде Мах/MSP. В этом синтезаторе в качестве основного источника звука используются аудио-файлы, которые преобразуются в три одновременно звучащих гранулы. В качестве изменяемых параметров выступят параметры изменения тона, размера длительности гранулы и смещение гранулы относительно начала звучания аудио-файла.
3.1 Генератор одной гранулы
Чтобы приступить к проектированию синтезатора, необходимо создать новый проект-File => New Patcher, предварительно добавив несколько объектов, позволяющих производить мониторинг выходного аудио-сигнала (meter~) и варьировать степень усиления (gain~), а так же аудио выход (ezdac~) и два управляющих сообщения (0 и 140) для объекта gain~. Все объекты добавляются с помощью контекстного меню, вызываемого двойным кликом по рабочей области проекта, и выбором элемента object, в поле которого и вводятся имена объектов.
Рисунок 3.1 Meter~, Gain~, ezdac~ и два управляющих сообщения.
В связи с тем, что синтезатор основывается на гранулярной обработке аудиофайлов, сначала создается buffer~ объект, которому присваивается название “sample” (или любое другое понравившееся вам), а так же добавляется сообщение “replace", которое помимо загрузки аудиофайла автоматически выставляет размер буфера, соответствующий длине данного аудиофайла.
Рисунок 3.2 buffer~ объект с присвоенным именем “sample”
Последующие операции направлены на создание воспроизводящего аудиофайл тракта. А именно двух объектов: play~ , ссылающегося на объект buffer~ за счет значения “sample” и phasor~ , представляющего собой генератор пилообразной волны, генерирующий значения от 0 до 1. Но при этом прямое соединение данного объекта с play~ приведет лишь к тому, что воспроизводиться будут только два сэмпла из всего аудиофайла. Поэтому для расширения диапазона значений объекта phasor~ производится умножение (*~) его выходного сигнала, допустим, на 800 (*~ 800).
Рисунок 3.3 Добавленные объекты play~, phasor~ и *~.
Убедиться в том, что файл воспроизводится можно, закрыв проект для редактирования (маленький замок в левом нижнем углу проекта), включив ezdac~ и вывернув параметр объекта gain~ до 140 используя вспомогательное сообщение.
Далее добавляется новый объект именуемый number, выход которого соединяется с правым входом функции перемножающей сигнал объекта phasor~. Данный объект отвечает за размер гранул, поэтому, для дальнейшего удобства управления, справа от него добавляется объект comment со значением “Grain size (ms)”, поясняющим, что данный параметр отвечает за размер гранул в миллисекундах.
Рисунок 3.4 Добавленный объект “number”.
Следующая функция отвечает за частоту объекта phasor~. Она необходима по той причине, что при постоянной частоте объекта phasor~ объект play~ будет воспроизводить гранулы различной длительности за один и тот же промежуток времени, что скажется на выходном сигнале в виде изменения его тона. Поэтому для расчета частоты объекта phasor~ используется следующая формула
которую для удобства можно представить в следующем виде
В программной же среде, данная функция реализуется добавлением объекта инверсного деления сигнала (!/~), в поле которого вместо делителя вводится делимое (1000). Также перед объектом инверсного деления ставиться объект sig~, преобразующий числовые данные в сигнальные. Дальнейшее соединение левого выхода объекта number с входом объекта sig~, который в свою очередь соединяется с левым входом функции инверсного деления, соединенной с левым входом объекта phasor~ и правым входом функции умножения задающей размер гранулы (соединение же между параметром "Grain size" удаляется), приводит к тому, что гранулы воспроизводятся без каких-либо изменений в тональности.
Итогом последнего преобразования является полноценный генератор одной гранулы.
Рисунок 3.5 Генератор одной гранулы.
На этом пока все. В качестве домашнего задания предлагаю вам подумать, что будем делать дальше ;)
добавить регулятор питча, адср или подобную огибающую, пан, а потом заделать много гранул, каждой из которых дадим индивидуальные значения всех параметров по какому-то алгоритму.
ОтветитьУдалитьПочти )) Итоговый вариант несколько проще будет ))
Удалить